5 返信 最新の回答 日時: Jul 18, 2008 7:58 PM ユーザー:(nosuke)

    [6.0] exportDataObjectによるファイル出力時に文字コードをUTF-8にできないか?

    Level 1
      Acrobat6.0でPDFファイルへJavaScriptによる処理の記述を行っています。

      日本語を含むテキストファイルを出力するため、以下のコードを記述しました。

      this.createDataObject("test.txt", "テスト出力情報です。");
      this.exportDataObject("test.txt");

      ただ、これで出力されたファイルの文字コードは「UnicodeBE」となります。
      文字コードを「UTF-8」で出力したいのですが、何か方法はないのでしょうか?

      createDataObject でMIMEタイプの指定もできるようなのですが関係なさそうですし(実際、text/xml等、幾つか試してみたのですが「UnicodeBE」のまま変わらず…)
        • 1. Re: [6.0] exportDataObjectによるファイル出力時に文字コードをUTF-8にできないか?
          Level 1
          経験に基づく勘ですが、MIMEの指定を
          "text/plain; charset=UTF-8"
          でどないでしょうか。
          • 2. Re: [6.0] exportDataObjectによるファイル出力時に文字コードをUTF-8にできないか?
            Level 1
            残念ながらダメでした…。

            私もcreateDataObjectでのMIME指定か、「文書のプロパティ」でこの文書で使用しているフォントが表示されますが、そのあたりが怪しいと思っています。

            文書で使用するフォントをUTF-8エンコーディングされているものにすると、出力ファイルがUTF-8になるとか…。
            • 3. Re: [6.0] exportDataObjectによるファイル出力時に文字コードをUTF-8にできないか?
              Level 1
              確認環境:Acrobat 7.1.0 Pro、秀丸Ver.7.0.8

              > this.createDataObject("test.txt", "テスト出力情報です。");
              これに続けて「this.createDataObject("test2.txt", "This is test."); とすると、PDF文書に添付ファイルが2つ作成される。

              最初のtext.txtはUnicode(Big-Endian)として開かれ(秀丸の文字コードは自動認識)、後者のtext2.txtはShift-JISとして開かれます。

              送られる日本語が最初からUnicode(Big-Endian)化されているからUnicode(Big-Endian)として開くのでは?
              ならば、文字コードをUTF-8に変換してから書き込んでやればいいのでは?

              Acrobat JavascriptはECMAScriptに準拠しているとされる。よって、多くの世の中にあるJavascript用スクリプトが応用できる。

              環境は違うが、Acrobat7.0以降ならsetDataObjectContents、getDataObjectContents、stringFromStream、streamFr omStringなどで対応できそうな気がする。

              例えば、streamFromStringの説明は以下のもの。

              [streamFromString]
              cString:The string to be converted into a ReadStream object.
              cCharSet(optional): The encoding for the string in cString. The options are utf-8, utf-16, Shift-JIS, BigFive, GBK, UHC. The default is utf-8.

              そのあとにには以下のようなサンプルが掲載されている。

              Example:Take the response given in a text field of this document and append it to an attached document.

              var v = this.getField("myTextField").value;
              var oFile = this.getDataObjectContents("MyNotes.txt");
              var cFile = util.stringFromStream(oFile, "utf-8");
              cFile += "¥r¥n" + cFile;
              oFile = util.streamFromString( cFile, "utf-8");
              this.setDataObjectContents("MyNotes.txt", oFile);

              試しに以下のようにやってみると、UTF-8として開かれた。
              空のデータファイルを作成して、そこに文字コード変換したものをセットするという流れか。

              this.createDataObject("MyData.txt","");
              var cFile = "これはテスト用のデータです。";
              oFile = util.streamFromString( cFile, "utf-8");
              this.setDataObjectContents("MyData.txt", oFile);
              • 4. Re: [6.0] exportDataObjectによるファイル出力時に文字コードをUTF-8にできないか?
                Level 1
                ありがとうございます。

                >Acrobat JavascriptはECMAScriptに準拠しているとされる。よって、多くの世の中にあるJavascript用スクリプトが応用できる。

                なるほど。
                客先要件がAcrobat Reader6.0以上で動作することなので、まずは6.0で実装する方法をとして、UTF-8文字コード変換するJavaScriptを探してみます。(UTF-8エンコードするJava Scriptはたくさんあるのですが)

                少なくとも7.0ではutil.streamFromStringにより動作するとのことなので、動作条件を7.0以上とすることを客先に働きかけることも考えてみます。
                • 5. Re: [6.0] exportDataObjectによるファイル出力時に文字コードをUTF-8にできないか?
                  Level 1
                  自己レスです。
                  本件、いろいろと試してみたのですが、結局6.0で実装することは諦めました。
                  JavaScriptでは型として「バイト型」が無いため、自分の能力ではどうしてもUTF-8に変換した文字コードを出力することができませんでした。

                  出力されたファイルは最後はサーバにアップロードされるので、そこでUTF-8に変換することとします。

                  どうもありがとうございました。