InDesignからScriptでEPUB書き出し 苦戦中

 先日から、InDesignCS5で、Scriptを使用したEPUB(Digital Edition)書き出しに取り掛かっていますが、一向に埒が明きません。

 InDesignの通常の機能と違って、Script化した、つまりCOMで利用できるメソッド形式で公開されていないので、用意されているjavascriptを読み込んで利用するしかないのですが、何で、こんなめんどくさいことをやらないといけないのかさっぱりわかりません。

 以前のバージョンから、ファイルメニューの書き出しの機能はCOMメソッドで供給されず、javascriptを参考にして実装するしか無いようになっています。

 マニュアルに詳しく書いてあればまだいいのですが、何もないので、Adobe Forumなど、あちこちを検索して、同じ所でつまずいている人がいないか探す日々が続いています。

 最初は、OEBExportの部分だけを取り扱えばいいのかと思っていたら、どうもうまくいきません。

 何のことはない、XHTMLExportの方も実装しないといけないという事が分り、組み込みました。

 当然、インデザインのファイルメニューで書き出す時に表示されるダイアログで設定できるオプションをどこで設定するのかも、説明があるわけではないので、手探りで探して、ほぼ、ダイアログで指定できるものは探し当てることができました。

 次のようなscriptで、これをInDesignのdoScriptメソッドで実行させています。

app.scriptPreferences.version = 7.0;
var outputFile = File('"D\EPUBTEST\FierstEpub.epub"');
var document = app.documents.firstItem();
var scriptPath = Folder.startup + '/Scripts/XHTML For Digital Editions/';
var scriptFile = File(scriptPath + 'OEBExport.jsxbin');
if (scriptFile.exists)
{
  scriptFile.open();
  var script = scriptFile.read();
  scriptFile.close();
  eval(script);
  var xhtmlscriptPath = Folder.startup + '/Scripts/Export As XHTML/';
  var xhtmlscriptFile = File(xhtmlscriptPath + 'XHTMLExport.jsxbin');
  if (xhtmlscriptFile.exists)
  {
    xhtmlscriptFile.open();
    var otherScript = xhtmlscriptFile.read();
    xhtmlscriptFile.close();eval(otherScript);

    var opts = new OEBExportOptions();
    opts.preview = false;
    opts.metadata = true;
    opts.metadataPublisher = 'ABCD Company';
    opts.metadataIdentifier = 'ISBN-1234-5678';
    opts.contentFlavor = OEBExportOptions.exportXHTML;
    opts.scope = OEBExportOptions.exportDocument;
    opts.ordering = OEBExportOptions.inDesignOrder;
    opts.numberedListsPolicy = OEBExportOptions.regularOrderedListItems;
    opts.bulletedListsPolicy = OEBExportOptions.regularUnorderedListItems;
    opts.styleHandling = OEBExportOptions.embeddedStyleSheet;
    opts.styleSheet = 'template.css';
    opts.includeOverrides = true;
    opts.includeStyleInfo = true;
    opts.embedFonts = true;
    opts.imageHandling = OEBExportOptions.copyOptimized;
    opts.formatted = true;
    opts.imageExtension = '.jpg';
    opts.imageConversion = ImageConversion.automatic;
    opts.gifOptionsPalette = GIFOptionsPalette.adaptivePalette;
    opts.gifOptionsInterlaced = false;
    opts.jpegOptionsQuality = JPEGOptionsQuality.medium;
    opts.jpegOptionsFormat = JPEGOptionsFormat.baselineEncoding;
    app.exportForWebPreferences.gifOptionsInterlaced = true;
    opts.includeTOCEntries = false;
    opts.tocStyleName = 'DefaultTOCStyleName';
    opts.suppressAutoTOC = false;
    opts.chunkDocuments = false;

    var exporter = new OEBExporter(scriptFile, 'Test', undefined);
    var success = exporter.doExport(document, opts, outputFile);
    if(success)
    {
      if(exporter.outOfDateLinks.length > 0)
      {
        alert('Exporting ' + document.name + ' succeeded\nHowever ' + exporter.outOfDateLinks.length + ' links were out of date.');
       }
      else
      {
        alert('Exporting ' + document.name + ' failed with this error message:\n' + exporter.error.message);
      }
    }
  }
}

 ところが、やはり例外が起こりうまくいきません。

 最初は、「undefinedはオブジェクトではない」というエラー。

 javascriptはあまり使わないので、なんだこれは!

 というところから、結局、指定するオプションパラメータをコメントにし、少しづつ、確かめていくと、状況で、エラーの内容が違ってきます。

 「undefinedはオブジェクトではない」、、「swf_template.htmlが開けない」、今は、「XHTMLExport.jsx* not found.」です。

 どこでこのエラーが出ているのかと思い、sdkに含まれるソースを見ると、どうも、

    var script = this.loadScript("export as xhtml/XHTMLExport.jsxbin");
    if(!script.exists) {
      script = this.loadScript("xhtmlexport/XHTMLExport.jsx");
      if(!script.exists) {
        alert("XHTMLExport.jsx* not found.");
      }
    }

のメッセージと一致するので、この部分かなぁという気になっています。

 それにしても、「XHTMLExport.jsxbin」の存在は、予めチェックしているのに、何故、ここでひかかっているのか、謎です。

 DreamWaverへの書き出しも、この「XHTMLExport.jsxbin」を使用して、こちらは処理できているのに、何故、パスチェックに引っかかっているのか、お手上げの状態です。

 それにしても、「XHTMLExport.jsxbin」が発見できなかった場合の、次の候補である「xhtmlexport/XHTMLExport.jsx」は、sdkのフォルダーとscriptファイルなので、通常には無いはず? どうして、こちらをチェックするようになっているのか、不思議ですね。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのトラックバック