6 返信 最新の回答 日時: Oct 2, 2008 10:09 AM ユーザー:(nosuke)

    [6.0]ReaderでexportAsXFDFがNotAllowedErrorにより実行できない

      バージョン:Acrobat Acrobat 6.0.6 Pro
      OS:Windows XP Pro

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

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

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

      しかし、本スクリプトをReaderで実行しようとすると「NotAllowedError」というメッセージが表示されてしまいます。

      過去のトピックを検索したところ、以下にほぼ同じものを見つけました。

      http://forums.adobe.co.jp/cgi-bin/WebX?128@@.474ccf7a

      trustedFunctionを活用する方法について検討がされているので、英語版のフォーラムもチェックしながらtrustedFunctionについても調査をしています。ただ、英語が 苦手なものでなかなか進みません。

      ちなみに、上記トピックスの中に「文部科学省オンライン申請」というシステムに関する記述があったので、そちらにアクセスしてみました。
      動作環境にはAcrobat6.0と7.0で動作するとあります。
      とりあえず、申請用のPDFまで辿りつき(https://shinsei.mext.go.jp/request/ReqMainServlet/getForm)、ブラウザ上で開いてみた ところ、フォームフィールドやボタンがあるPDFが表示されました。

      「データのみ保存」といったボタンもあり、XFDF形式でのデータ保存もできます。
      恐らく、「exportAsXFDF」を使用しているものと思われます。
      なお、Readerの保存ボタンが使用できたので、getForm.pdfという名前でローカルに保存してみました。

      そのファイルをAcrobat Reader 8.0で開いたところ、PDFが開かれた後に「このファイルはブラウザ上でしか使用できません」というメッセージが表示されて、「OK」ボタンをクリックするとファイルが閉じられてしまうの ですが、その際に一つ気がついたことがあります。
      それは、PDFファイルの上部に「このドキュメントにはフォームフィールドが含まれています。このフォームに入力したデータを保存できます。」と表示されているということです。

      通常、フォームフィールドを含むPDFをAcrobat Reader 8.0で開くと、PDFの上部に
      「このドキュメントにはフォームフィールドが含まれています。このフォームに入力したデータは保存できません。…」
      といったメッセージが表示されています。

      「getForm.pdf」が保存可能なフォームとして認識するということは、PDFファイルそのものの設定により、フォームフィールドが含まれるPDFも信頼させることができるような気がし ます。
      それとも、私の見解は間違っていて、やはりtrustedFunction等を使用しなければいけないのでしょうか?

      少なくとも、この文部科学省のシステムでは、 Reader上でもセキュリティ上制限されている関数を使用できるようにしているので、何らかの方法はあるとは思うのですが。
        • 1. Re: [6.0]ReaderでexportAsXFDFがNotAllowedErrorにより実行できない
          JSのリファレンスが入手出来れば記載されているのですが、お察しの通り「exportAsXFDF」は制限されています。
          Readerで動作させたいのであれば下記の製品の購入及び運用を検討して下さい。

          http://www.adobe.com/jp/products/livecycle/readerextensions/

          考え方としてはReader自身が本来持っている機能を「あえて殺している」訳です。それを解除するためのライセンスという事ですね。
          • 2. Re: [6.0]ReaderでexportAsXFDFがNotAllowedErrorにより実行できない
            Level 1
            情報ありがとうございます!!
            早速チェックしてみましたが、確かに私がやりたいことができるようです。

            Adobe Reader 7以降に対応となっているのが気になりますが、製品の問い合わせ等を行ってみます。
            • 3. Re: [6.0]ReaderでexportAsXFDFがNotAllowedErrorにより実行できない
              Level 1
              > NotAllowedErrorにより実行できない
              これが何を意味するものであるかは、リファレンスにも載っている。

              Acrobat 7.0 Proであれば、[Adobe Reader で注釈を有効にする] 機能でAdobe Readerでも注釈機能が可能になる(Ver8.0以降では[Adobe Reader の拡張機能を有効にする]という表記になっているはず)。
              当然、注釈と同じレベルにあるフォームも[注釈の取り込み]、[注釈をデータファイルに書き出し]も可能になる。後者は、XFDF形式やFDF形式の書き出しに対応する。

              文書番号 : 225762
              [基本操作] Adobe Reader でも注釈を付けられる PDF を作成するには

              ・Adobe Reader ユーザに対する注釈機能の有効化
              http://help.adobe.com/ja_JP/Acrobat/8.0/Professional/help.html?content=WS8F17CB6D-B39D-4cf 6-8060-7907C1AC53F7.html

              ・Reader ユーザがフォームデータを保存できるようにする
              http://help.adobe.com/ja_JP/Acrobat/8.0/Professional/help.html?content=WS58a04a822e3e50102 bd615109794195ff-7e0d.html

              普通にセキュリティを何も設定しないPDF文書でも、Adobe Readerで開くと「注釈:許可しない」になる。
              一方、[Adobe Reader で注釈を有効にする] に設定したPDF文書では「注釈:許可」になる。

              以下は「JavaScript for Acrobat API Reference Ver8.0」にある一文。

              Still, some APIs are restricted to Acrobat Professional and some cannot be used by Adobe Reader, while others can be used in Adobe Reader only when the document has the appropriate Reader Extension Rights. Again, for a JavaScript solution, all these factors must be considered.

              注釈許可などの権限は、PDF仕様上、すべてセキュリティで管理されており、フラグを立てるか立てないかの組み合わせで決まるという。
              あくまでPDFの仕様上であって、アプリケーション側がそれに対応しているかは別問題。

              ・PDFのセキュリティ機能(3)?PDFの利用許可制御
              http://blog.antenna.co.jp/PDFTool/archives/2006/11/13/
              • 4. Re: [6.0]ReaderでexportAsXFDFがNotAllowedErrorにより実行できない
                Level 1
                #3のうち、以下の部分を訂正。フォームについてはフォームデータを含むPDF文書全体である。

                誤:
                当然、注釈と同じレベルにあるフォームも[注釈の取り込み]、[注釈をデータファイルに書き出し]も可能になる。
                正:
                [注釈の取り込み]、[注釈をデータファイルに書き出し]も可能になる。

                また、[Adobe Reader で注釈を有効にする] で可能になる機能もAdobe Readerのバージョンによって若干違うようだ。

                Acrobat 8.0では以下のように説明される。

                文書番号 : 5980
                http://support.adobe.co.jp/faq/faq/qadoc.sv?5980+001
                新機能は何ですか
                [Adobe Reader で操作できる権限の拡大]
                Adobe Reader の拡張機能を有効にすることによって、Adobe Reader のユーザが使用できる機能が拡張されます。有効になる機能は以下のとおりです。
                − フォームデータの保存
                − 注釈の追加と描画マークアップツールの使用
                − 既存の署名フィールドへの署名
                − ページ上の任意の場所に署名を追加(Adobe Reader 8 のみ)

                以下は参考。簡単にいくようでいかない場合もある。

                PDF 千夜一夜: 2008年05月01日 「Adobe Readerで電子署名ができるのかどうか?」
                http://blog.antenna.co.jp/PDFTool/archives/2008/05/01/
                http://blog.antenna.co.jp/PDFTool/archives/2008/05/02/
                http://blog.antenna.co.jp/PDFTool/archives/2008/05/03/
                • 5. Re: [6.0]ReaderでexportAsXFDFがNotAllowedErrorにより実行できない
                  Level 1
                  元質問が混乱気味で意図がややつかみ切れないが。

                  [Adobe Reader で注釈を有効にする] 関連の話しに傾いたので、戻してみる。

                  基本に立ち返り、Acrobat Javascriptとは何か?という事を考えてみよう。
                  それはAcrobat(Adobe Reader)で出来る操作をバッチ処理化し、ユーザ側が楽をするということであろう。
                  よってその操作はAcrobat(Adobe Reader)以上のことは出来ないし、セキュリティや機能等で出来ない操作はAcrobat Javascriptでも出来ない(逆に出来たら怖い)。

                     「Acrobat JavascriptはAcrobatを超えない」(勝手な定義)

                  また、Acrobat Javascriptは繰り返し処理が簡単なので、たとえAcrobat(Adobe Reader)で可能であっても、繰り返し処理によってはセキュリティホールとなる処理にはある程度の制限が加えられる。

                  とはいえ、ユーザ側で承知して使う分には許容度を下げましょうというのがtrustedFunctionなどの機能と推測される(使ったこともないのであくまで推測)。それでも予め宣言してア プリケーションとしてのAcrobat(Adobe Reader)がそのスクリプトを読み込んでおく必要がある。そうすることによって敷居を高くし、簡単に悪用されないようにしていると思われる。

                  > this.createDataObject("test.txt", "テスト出力情報です。");
                  > this.exportDataObject("test.txt");
                  > 本スクリプトをReaderで実行しようとすると「NotAllowedError」というメッセージが表示され
                  元々、createDataObjectやexportDataObjectが何をするメソッドかは理解している?

                  createDataObjectはPDF文書内に添付ファイルを作成できるが、Adobe Readerで添付ファイルが可能ということを確認しているのだろうか?
                  Adobe Readerで添付ファイル作成が可能なPDF文書なのに、同じPDF文書でAcrobat Javascriptからは出来ないというのであれば問題であろう。
                  しかし、Adobe Readerの通常操作でも出来ないならAcrobat Javascriptでも不可能と考えるのが普通では? スクリプトだから多少の工夫で不可能を可能に出来る余地はあるかもしれないが、可能性としては低いとみるべきだろう。

                  リファレンスでcreateDataObject、exportDataObjectの部分を読み直してはどうか?
                  制限とかいろいろ書いてあるみたいだけど、じっくり読んでいる?
                  英語が苦手という言い訳は成立しないでしょう。翻訳ソフト(サイト)を使う手もあるし、Acrobat SDKに入会すれば日本語訳資料もあるらしい(入会していないので実体は知らない)。

                  文書番号 : 2548
                  各 SDK に収録されている文書の日本語翻訳版のご提供について

                  ところで、

                  > ReaderでexportAsXFDFがNotAllowedErrorにより実行できない
                  これが件名だけど、本文にはこれをどこで試したのか書いていない。createDataObjectやexportDataObjectの例は書いてあるが、exportAsXFDFはどこで 試したのだろう?
                  当人はexportAsXFDFをやりたいの?
                  エラーメッセージが同じだから対処方法が全く同じとは限らないのでは? (ヒントにはなるかもしれないが)
                  • 6. Re: [6.0]ReaderでexportAsXFDFがNotAllowedErrorにより実行できない
                    Level 1
                    本件、調査と評価に時間がかかってしまいましたが、結論から言うと「LiveCycle Reader Extensions」という製品でPDFファイルに署名することで、PDFファイルのJavaScriptコードには手を加えることなく exportAsXFDF、importAsXFDF、createDataObject、exportDataObjectの制限されていた関数が使用可能となりました。

                    >nigorinさん
                    情報提供ありがとうございました。

                    >brazilさん
                    いろいろとアドバイスありがとうございました。
                    craetaDataObject、exportDataObjectについては正直あまり良く理解せずに、単純にテキストファイルを外部出力するための手段としか見ていませんでした。
                    色々と勉強したいと思います。