10 返信 最新の回答 日時: Mar 18, 2008 12:11 AM ユーザー:oputo

    ReaderでFDFが保存できない。

    oputo
      windows XP
      Acrobat3D 8.1.2 上のフォーム「ボタン」からjavaScriptコマンド、

      exportAsFDF();

      を実行すれば、保存ダイアログが出来るのですが、

      いざReader 8.1.2 上で試すと
      「NotAllowedError: セキュリティ設定により、このプロパティまたはメソッドへのアクセスは許可されていません。」
      とエラーが出てしまいます。

      以前、ここのトピックにもあったように
      "cPath"を付けるとセキュリティの関係でエラーになるが、
      省略すればダイアログが出る、との事ですが。

      ------------

      ファイルプロパティ「文章に関する制限の概要」で比較すると、
      Acrobat3Dでは全て「許可」になっているが、
      Readerで開くと、文章アセンブリ、テンプレートの作成が「許可しない」に変わっています。

      セキュリティ設定(なし、パスワード)や、「Adobe Reader で機能拡張を有効にする」を
      組み合わせて試しましたが、上手くいきません。

      ------------
      解決のアドバイスを頂けますでしょうか。
      宜しくお願いします。
        • 1. Re: ReaderでFDFが保存できない。
          Level 1
          下記のページには
          「このメソッドはAcrobat Readerでは機能しない。」
          と、書いてありますね。

          http://www.mdn.co.jp/Wdesign/IJ/22/02/text.htm

          入り口はこの辺?
          http://www.mdn.co.jp/Wdesign/IJ/

          ソースを見つけました。
          http://www.adobe.com/jp/support/products/pdfs/acrojs_j.pdf
          116ページ。

          上記PDFファイル18ページ目。
          クイックバーの説明
          「×をまるで囲んだマーク」 4 つ目の列が空白でない場合は、このメソッドまたはプロパティがAcrobat Reader で使用
          できないことを示します。
          • 2. Re: ReaderでFDFが保存できない。
            Level 1
            基本的なこととして、「JavaScript for Acrobat API Reference 8.0」でexportAsFDFを見ているであろうか?

            exportAsFDFの項には赤字で「S」がある。つまり、セキュリティ上の設定がはじめからあるメソッドということ。ここでいうセキュリティは文書アクセス上のセキュリティとは別個のはず 。

            Note以下に「See also “Privileged versus non-privileged context” on page 32.」とあり、リンク先を見ると「Some JavaScript methods, marked in this book by S in the third column of the quick bar, have security restrictions. These methods can be executed only in a privileged context, which includes console, batch and application initialization events.」とある。

            さらにその先には「You can execute security-restricted methods through menu events in one of the following ways:」とあり、以下の2つの方法が述べられている。

            ・By opening the JavaScript category of the Acrobat preferences and checking the item named “Enable Menu Items JavaScript Execution Privileges”.

            ・By executing a specific method through a trusted function (introduced in Acrobat 7.0). Trusted functions allow privileged code - code that normally requires a privileged context to execute - to execute in a non-privileged context. For details and examples, see app.trustedFunction.

            前者は、環境設定のJavaScript以下で[メニュー項目のJavaScript実行権限を有効にする]のチェックをオンにすることであろうか? ただしAdobe Reader 7.0.9にはこの項目はない。
            後者は、対象メソッドをtrustedFunctionにて宣言するという意味であろうか?

            「メニュー項目のJavaScript実行」とは、おそらくはAdobe Readerのメニューから実行するものをJavaScriptでも動作可能にすることであろう(推測)。
            Adobe ReaderのメニューにFDF(XFDF)形式で保存するメニューはないので、このままではexportAsFDFは実行できないであろう。

            後者のtrustedFunctionはどうであろうか? リファレンスにはいろいろと書かれてあるようだ。
            文字通りのexportAsFDFを信頼できる関数として宣言するように設定するのであろう。
            スクリプト内で信頼するだけでなく、スクリプトを文書レベルあるいはフォルダーレベルで保存しなくてはならないように思える。

            「Developing Acrobat Applications Using JavaScript 8.0」には以下の記述がある。

            What happens when we execute this method in a non-privileged context? Create an Acrobat form button, and attach the following script as a mouse up JavaScript action.
            var oRetn = app.browseForDoc({bSave: true});
            After clicking the button, an exception is thrown; the console displays the following message:
            NotAllowedError: Security settings prevent access to this property or method.
            app.browseForDoc:1:Field Button1:Mouse Up

            挙げられているエラーメッセージは質問者と同じもの。
            つまり、質問者は「non-privileged context」の環境でメソッドを実行していることになる。

            Adobe Readerで全てのAdobe JavaScriptメソッドを実行させられると、情報が漏れたり文書の破壊などの可能性もあり、その対策としていくつかのメソッドには制限があるのではなかろうか?
            • 3. Re: ReaderでFDFが保存できない。
              Level 1
              「Developing Acrobat Applications Using JavaScript 8.0」にはさらに[Writing JavaScript for Adobe Reader]という項目が設けられている。

              それ以下に書かれていることが参考になるのでは?

              以下の文章のあとにaddAnnot、importAnFDF、exportAsFDFの3つが挙げられている。

              If a document is rights-enabled but commenting is not allowed, then the JavaScript methods shown in the following table will be disabled.
              • 4. Re: ReaderでFDFが保存できない。
                Level 1
                当方Acrobat 8.0は触ったことが無いので、詳細手順は不明ですが、
                ボタンのアクションで
                「FDF の書き出し」といったものが選べると思いますよ。

                JavaScript を使わない運用も検討してみては?
                • 5. Re: ReaderでFDFが保存できない。
                  Level 1
                  exportAsFDFを使う理由が明確ではないが、exportAsFDFとexportAsXFDFの違いは押さえていたほうがいいだろう。
                  Acrobat同士でデーターが循環するのであればFDFでもかまわないだろうが、他アプリケーションへの取り込みなどを考えるとXFDFであろうか。

                  また、exportAsXFDFStrやexportAsFDFStrがVer8.0から導入されている点も留意したい。

                  使ったことはないが、Acrobat 8には「フォームトラッカー」という機能がある。

                  ・フォームトラッカーについて
                  http://help.adobe.com/ja_JP/Acrobat/8.0/Professional/help.html?content=WS0C017BFC-057C-499 6-B1AE-7137093B41B4.html

                  新機能の説明によれば、「作成したフォームまたは入力したフォームを追跡」するものだという(注釈のものはレビュートラッカー)。

                  ・新機能
                  http://help.adobe.com/ja_JP/Acrobat/8.0/Professional/help.html?content=WS00E809B7-1119-441 6-8731-033B20B684B3.html

                  Adobe Readerでは通常、フォーム内容を保存できない(PDF文書の編集となるのでAdobe Readerの機能範囲を超えるため)。
                  しかし[Adobe Reader の拡張機能を有効にする]を実施すれば、入力したフォーム内容とともにPDF文書を保存できるはず。
                  あとはPDF文書を回収してデータを吸い上げるだけでもいいはず。

                  FDF形式での書き出しは、書き出し先がサーバーなどになっているはず。普通はブラウザ内でPDF文書を開き、フォームへ入力し[送信]ボタンをクリックといった感じになるのでは?
                  文部科学省オンライン申請もそのような感じになっており、XFDF形式の申請データも公開している。

                  ・文部科学省オンライン申請 フォームデータ 一式(xfdf形式)
                  https://shinsei.mext.go.jp/guide/xmltag/xmltag.html
                  • 6. Re: ReaderでFDFが保存できない。
                    Level 1
                    30頁と短いが、Adobe Reader向けの開発ガイドなるものもあった。

                    ・Developing for Adobe Reader Version 8.0
                    http://www.adobe.com/devnet/acrobat/pdfs/reader_overview.pdf
                    「This guide is meant for developers who are either new to Adobe Reader development or have experience with the Acrobat SDK.」
                    • 7. Re: ReaderでFDFが保存できない。
                      oputo Level 1
                      返事が遅くなりました。

                      確かに"Reader"ではセキュリティの関係でダイアログ表示も制限が掛かっているのが分かりました。
                      どうも"Acrobat"同士でFDF出力をし合う状況というのが想像できなくて紛らわしかったです。
                      ダイアログ表示ならウイルスも広まらないだろうから、せめてこれだけでも有効にしてもらいたいところですが、
                      最近はそれすらも厳しいんでしょう・・
                      ------
                      "メニュー項目のJavaScript実行"でPDFオープン・クローズ時に実行させたり、
                      "Trusted functions"宣言して上のレベルで許可を与えられるようですが、
                      要求としては3Dビュー上の逐次的な操作情報を得たいので、埋め込みスクリプト上からの実行が必須かと思います。
                      今は、exportAsXFDFStrでフォームにデータを出力し、ユーザにコピペを要求させています。
                      (XFDFが推奨との事で、なるほどでした。)

                      これから、頂いた方法やURL情報を試したり、
                      javaと連動させる考えなので「フォームトラッカー」と"PDFlib"や"itext"で抽出できないか試してみます。

                      brazilさん、habachhiさん、たいへん詳細なコメントありがとうございます!
                      • 8. Re: ReaderでFDFが保存できない。
                        Level 1
                        > 要求としては3Dビュー上の逐次的な操作情報を得たいので、
                        > 埋め込みスクリプト上からの実行が必須かと思います。

                        > javaと連動させる考えなので

                        これらの話しは質問投稿の個所にはまったく書かれていない。
                        フォーム、FDFの話しをしているので、フォームに書き込んだ情報を書き出す一般的な使い方に関することと思われた。
                        前提として必要な事柄は最初から書いてほしい。

                        質問者はすでに調べているとは思うが、Acrobat 3D向けのSDKは別個に用意されている。

                        ・Acrobat 3D Developer Center
                        http://www.adobe.com/devnet/acrobat3d/

                        「3Dビュー上の逐次的な操作情報」が何を指すのかはよく分からないが、Adobe Readerであってもサーバへのデータ送信は出来るのでは? PDFフォームをつかった登録というものはそういう機能を前提にしているはず。
                        あとはサーバーとの仕組み作りのように思えるが?
                        FDF Toolkitはまだダウンロードできるようだし、Java 1.2 用もあるという。

                        文書番号 : 2592 (サービスデータベース)
                        FDF Toolkit について

                        > XFDFが推奨
                        FDFとXFDFの違い(片方が一方的に優位ではない)は調べたほうがよい。

                        ・Acrobat Forms Data Format (FDF) Toolkit
                        http://www.adobe.com/devnet/acrobat/fdftoolkit.html

                        > "Trusted functions"宣言して上のレベルで許可を与えられるようですが、
                        単に宣言しても駄目のはず。それだと誰でもセキュリティホールを突くことが可能になる。
                        信頼できる関数であることを宣言し、なおかつAcrobat(Adobe Reader)が起動時に読みこむ必要があるはず。宣言したものをスクリプトとしてAcrobat(Adobe Reader)インストール先の専用フォルダに予めストアしておくのでは?

                        こういった情報は英語圏に豊富にあるようだ。

                        いわずもがなであろうが、trustedFunctionであり「Trusted functions」ではない。また、trustPropagatorFunctionというのもある。
                        beginPrivとendPrivも重要なメソッドのようにも見える。
                        • 9. Re: ReaderでFDFが保存できない。
                          oputo Level 1
                          >フォームに書き込んだ情報を書き出す一般的な使い方に関することと思われた。
                          はいその方法が知りたかったので、
                          その後の情報の扱い方はとりあえず関係ないと思い、あえて書きませんでした。
                          解決方法を狭めているようであれば失礼しました。
                          ---
                          「3Dビュー上の逐次的な操作情報」とは
                          例えば、ユーザが3Dビュー上のモデルを操作するとカメラパラメータが逐次変化しますが、
                          その情報を添付ファイルも含めて埋め込みJavaScriptなりJAVAからの抽出を考えています。

                          なぜJAVAかというと、PDFと配布するJAVAアプリケーション間でフォームパラメタ、添付ファイルなりを
                          (クライアント上で)やり取りしたいからです。

                          >Adobe Readerであってもサーバへのデータ送信は出来るのでは?
                          それら要求に耐えられるサーバ環境を整えられそうにもないので、
                          上記"JAVAアプリケーション"含め、クライアント上のオフライン環境を想定しています。
                          AIR環境でPDFを扱う記述は若干ありましたが、まだ開発途上のようで様子を見ています。
                          サーバ上でFLEXとJAVAを連動させる方法も調べましたが、やはり自分の趣旨とは違うようです。

                          ---

                          "trustedFunction"などで解決出来そうですが、
                          スクリプトを専用フォルダにコピーさせる猥雑なことになるので出来れば避けたいところですが、
                          不可避であれば、それらをセキュリティ認証が通る箇所からXFDF出力で試してみようと思います。
                          • 10. Re: ReaderでFDFが保存できない。
                            oputo Level 1
                            その後の結果ですが、フォーム値の抽出に関しては、
                            アドバンスの「Acrobat Readerで拡張機能を有効にする」を設定して、
                            保存されたフォーム値を、itextから抽出する方法が成功しました。

                            ですので今はXFDFに頼らず、極力フォームに値を振り込んでから抽出しようと思います。

                            アドバイス頂き、ありがとうございました。