11 返信 最新の回答 日時: Nov 23, 2009 8:48 AM ユーザー:yuridebura

    PDFファイルをJpegファイルに変換するスクリプト

      Access2000のVB6.5を使って、PDFファイルを読み込み先頭に数ページをJpegファイルに変換し、アクセスの帳票にその画像を貼りたいと思っています。
      Acrobatのバージョンは7です。

      以下のコーディングでは「NotAllowedError: セキュリティ設定により、このプロパティまたはメソッドのアクセスは許可されていません。」のエラーが出てしまいます。

      Private Sub コマンド0_Click()
      Dim gApp As Acrobat.AcroApp
      Dim avDoc As Acrobat.AcroAVDoc
      Dim pdDoc As Acrobat.AcroPDDoc
      Dim jso As Object
      Set gApp = CreateObject("AcroExch.App")
      Set avDoc = CreateObject("AcroExch.AVDOC")
      Set pdDoc = CreateObject("AcroExch.PDDOC")
      lRet = gApp.Show
      lRet = avDoc.Open("c:¥test.pdf", "")
      Set pdDoc = avDoc.GetPDDoc
      Set jso = pdDoc.GetJSObject
      lRet = jso.SaveAs("/c/test.jpg", "com.adobe.acrobat.jpeg")
      End Sub

      「Acrobat JavaScript Scripting Reference」を見るとSaveAsの方法はバッチ、コンソール、またはメニューイベントしか実行しませんのようなことが書いてありました。
      アメリカのサイトを見てみると↓できたようなことも書いてあります。
      http://www.adobeforums.com/webx?14@@.3bc3651f/6

      どのようにすれば、プログラムでPDFファイルからJpegファイルに変換できるかご存じの方教えてください。壁にぶち当たっています。
      よろしくお願いいたします。
        • 1. Re: PDFファイルをJpegファイルに変換するスクリプト
          Level 1
          まず、他人に読んで欲しいなら、ソースにコメントくらい入れましょう。

          ・どの行でエラーになるのでしょうか。
          ・SaveAsで指定しているパスは正しいですか?
          ・"com.adobe.acrobat.jpeg"でgoogle検索すると、(色んな意味で)ためになるページが見つかります。
          • 2. Re: PDFファイルをJpegファイルに変換するスクリプト
            Level 1
            どうもすみませんでした。
            lRet = jso.SaveAs("/c/test.jpg", "com.adobe.acrobat.jpeg")
            でエラーになります。
            エラーメッセージは「NotAllowedError: セキュリティ設定により、このプロパティまたはメソッドのアクセスは許可されていません。」です。

            ・SaveAsのパスは正しいと思います。
            ・"com.adobe.acrobat.jpeg"でgoogle検索して色々試してみたのですが分かりませんでした。

            VBのスクリプトでSaveAsを使って本当にJpegファイルに変換できるかどうかも分かりません。なんかセキュリティの関係で実行を制限しているようにも思えるのですが...。

            もし制限があるとしたら、それを解除して実行したいのですが、本当にできるのでしょうか?
            • 3. Re: PDFファイルをJpegファイルに変換するスクリプト
              Level 1
              bestieさん
              ありがとうございました。
              釈然としませんが解決いたしました。
              やはり、bestieさんご指摘のパスでした。
              jso.SaveAs("/c/test/test.jpg", "com.adobe.acrobat.jpeg")
              にしたら、正常に変換してくれました。
              cドライブの直下だとダメなんですかね。そのようなことはどこにも書いてなかった思うのですが。
              とにかくやりたいことができそうです。
              ありがとうございました。
              • 4. Re: PDFファイルをJpegファイルに変換するスクリプト
                Level 1
                もう1つ分かったことがありました。
                SaveAsでドライブ直下以外に日本語のディレクトリを指定しても「NotAllowedError: セキュリティ設定により、このプロパティまたはメソッドのアクセスは許可されていません。」のエラーが出ます。
                Adobeさん何とかしてくださいな。
                • 5. Re: PDFファイルをJpegファイルに変換するスクリプト
                  Level 1
                  > cドライブの直下だとダメなんですかね。
                  「JavaScript for Acrobat API Reference」にはSafe pathという概念をあげて、以下の事が書かれてある。

                  Safe path
                  Acrobat 6.0 introduced the concept of a safe path for JavaScript methods that write data to the local hard drive based on a path passed to it by one of its parameters.
                  A path cannot point to a system critical folder, for example a root, windows or system directory. A path is also subject to other unspecified tests.

                  Safe pathでないと判断されると「NotAllowedError」が上げられ、その意味は以下のものとされるとある。

                  Method or property is not allowed for security reasons.

                  これは「「NotAllowedError: セキュリティ設定により、このプロパティまたはメソッドのアクセスは許可されていません。」のエラーメッセージに一致する。
                  • 6. Re: PDFファイルをJpegファイルに変換するスクリプト
                    Level 1
                    > 日本語のディレクトリを指定しても
                    山勘で、escape()あるいはencodeURI()を試すとどうなる?
                    • 7. Re: PDFファイルをJpegファイルに変換するスクリプト
                      Level 1
                      brazilさん
                      ありがとうございます。
                      日本語のディレクトリを使えたら最高です。
                      >escape()あるいはencodeURI()を試すとどうなる?
                      現在、VBで書いていますが上記はJavaScriptですか?
                      どのように書き直せば試せますか?
                      よろしくお願いいたします。
                      • 8. Re: PDFファイルをJpegファイルに変換するスクリプト
                        Level 1
                        brazilさん
                        この前にもメッセージがあったんですね。気がつきませんでした。すみません。
                        A path cannot point to a system critical folder, for example a root, windows or system directory.
                        ちゃんと書いてあるのですね。英語はちょっとしかできないので理解不足でした。
                        Safety PathはC:¥test¥test.jpgを単純に/c/test/test.jpgに変換すればいいと思ってもっと単純化するために/c/test.jpgとしてテストをしたのが敗因で したね。

                        どうもありがとうございました。
                        • 9. Re: PDFファイルをJpegファイルに変換するスクリプト
                          Level 1
                          > 山勘で、escape()あるいはencodeURI()を試すとどうなる?
                          山勘なりの根拠(とはいっても山勘以上のものではない)。

                          「PDF Reference」では以下の記述がある。

                          3.10.4 URL Specifications
                          The URL must adhere to the character-encoding requirements specified in RFC 1738. Because 7-bit U.S. ASCII is a strict subset of PDFDocEncoding, this value may also be considered to be in that encoding.

                          URLとはインターネットにおけるファイルのありかを示すものだが、URIと同義とみなせば、ファイル指定はRFC1738に準拠しなくてはならない。
                          Acrobat JavaScriptはPDF操作に使われるので、当然それはPDF仕様に制限されるはず。
                          よって、Acrobat JavaScriptのファイル指定もRFC1738仕様のエンコーディングされたものになる(引用にあるPDFDocEncodingはPDF独自のエンコーディング)。

                          一般のJavaScriptはURL指定等で日本語を使う場合、そのままではなくエンコーディングする場合が多々あるはず。

                          RFC1738はすでに古く、URLに日本語も使えるようにRFCが改正されているようだが、「PDF Reference」はやや古い仕様に従う傾向なので注意したほうがいいだろう。

                          escape()、encodeURI()、encodeURIComponent()による変換結果を出してくれるサイトはいくつかある。それらのサイトで「c:¥いろはに¥」などを変換し 、日本語フォルダが直接指定できるかを確認したほうがいい。
                          escape関数自体は廃止される方向のようだが、Acrobat JavaScriptの対応が不明なので、試してみたほうがいい。

                          確認ができたら、VBでescape()と同等のことをする関数を作成すればいい。こういう基本的な関数は誰かが公開しているもので、探せばある。

                          もっとも私だったらそこまでしない。Adobe製品は英語圏ソフトだと思っており、日本語使用による不具合は必ずどこかにあると思うので、フォルダやファイル名に日本語は使わない。
                          あちらも日本語のような2バイト言語のテストなどやっているとも思えないし。
                          • 10. Re: PDFファイルをJpegファイルに変換するスクリプト
                            Level 1
                            brazilさん

                            テストした結果では3つともダメでした。
                            http://groundwalker.com/blog/2007/02/javascript_escape_encodeuri_encodeuricomponent_.html
                            上記サイトでescape()、encodeURI()、encodeURIComponent()で変換しました。
                            元パスはc:¥テスト¥ADHD.jpg

                            'encodeURIComponent()
                            path = "c%3A%5C%E3%83%86%E3%82%B9%E3%83%88%5CADHD.jpg"
                            'encodeURI()
                            path = "c:%5C%E3%83%86%E3%82%B9%E3%83%88%5CADHD.jpg"
                            'escape()
                            path = "c%3A%5C%u30C6%u30B9%u30C8%5CADHD.jpg"

                            いずれも、「NotAllowedError: セキュリティ設定により、このプロパティまたはメソッドのアクセスは許可されていません。」でした。

                            念のため、「テスト」のところだけ変換して、
                            path = "/c/%E3%83%86%E3%82%B9%E3%83%88/ADHD.jpg"
                            のようにやってみましたが、指定したフォルダが無いときのエラーと同じになり変換できませんでした。

                            とりあえず、フォルダ、ファイル名には日本語は使わないようにいたします。
                            ありがとうございました。
                            • 11. Re: PDFファイルをJpegファイルに変換するスクリプト
                              yuridebura

                              有料・無料を問いません。
                              ただし以下の条件を満たすことが条件です。

                              ・1つのフォルダに格納された、5000個のpdfファイルを全て一度にjpgファイルに変換すること。

                              ・複数ページのpdfに対応していること backup



                              以下のリンク先にあげられているソフトの半数以上は要求を満たしませんでした。半数はチェックできていないので確認して使用方法を教えてください。

                              http://q.hatena.ne.jp/1112614560


                              次の質問にも答えてください。

                              ・複数ページのpdfをjpgにした場合複数のjpgファイルが生成されるのか?それとも1つのjpgファイルを生成するのか?(後者が非常に望ましい)