PDFをJPEGに変換する方法(Excel VBAサンプル)

TOP > サンプル / 関数 > *      [...]


Method of conversion from PDF to JPEG.

説明

Acrobat PDF の全ページを JPEG ファイルに変換します。各ページのテキストも画像も1ファイルの JPEG ファイルに変換して出力します。

JPEG ファイル名にはページ番号が自動付加されます。Acrobat OLE の JSObject とExcel VBA OLE の機能を利用します。

サンプル:ExcelのVBA

  • 参照設定を事前に行う。
  • F8キーでステップ実行しながら動作確認出来ます。
001 Option Explicit 002 003 Private Sub CommandButton9_Click() 004 005 Dim objAcroApp As New Acrobat.AcroApp 006 Dim objAcroAVDoc As New Acrobat.AcroAVDoc 007 Dim objAcroPDDoc As Acrobat.AcroPDDoc 008 Dim lRet As Long 009 Dim jso As Object 010 011 'Acrobatアプリケーションを起動する。 012 lRet = objAcroApp.Show 013 'PDFファイルを開いて表示する。 014 lRet = objAcroAVDoc.Open("E:¥Test01.pdf", "") 015 'PDDocオブジェクトを取得する 016 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc() 017 'JavaScriptオブジェクトを作成する。 018 Set jso = objAcroPDDoc.GetJSObject 019 jso.SaveAs "E:¥test-01.jpeg", "com.adobe.acrobat.jpeg" 020 021 'PDFファイルを変更無しで閉じます。 022 lRet = objAcroAVDoc.Close(1) 023 'Acrobatアプリケーションを終了する。 024 lRet = objAcroApp.Hide 025 lRet = objAcroApp.Exit 026 'OLEを行うとAcrobatが不安定になるので、 027 '一応オブジェクトを強制開放する。 028 Set jso = Nothing 029 Set objAcroAVDoc = Nothing 030 Set objAcroApp = Nothing 031 End Sub


 Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
 

補足

  1. Acrobat Readerでは出来ません。
    Acrobat本体がデフォルトでインストールされているパソコン環境だけです。
     
  2. 以下が変換後のファイル名のイメージです。
     
    Method of conversion from PDF to JPEG.

     
  3. 上記サンプルでは objAcroApp.Show でAcrobatアプリ本体を起動表示しています。これはjso.SaveAs メソッドを連続で行うときに発生する不可解なエラー回避策です。高速化したいのならば objAcroApp.CloseAllDocs に置き換えて下さい。
     
  4. 当サンプルよりも以下の関数を利用してのJPEG 変換をおすすめします。
    関数:PDFを特定のフォーマットに変換する」 
    当ページのサンプルよりも安全にJPEG 変換が可能になります。
     

注意

  1. Acrobat SDK 8.1 に書かれている第2引数の説明が一部間違っています。
    以下が正解です。

    SDK:com.adobe.Acrobat.jpeg ※間違い
    正解:com.adobe.acrobat.jpeg ※「a」1文字違う
    この情報は、"C:¥Program Files¥Adobe¥Acrobat 8.0¥Acrobat¥ExportTask.xml" ファイルに入っている内容から当サイト管理者が勝手に判断したものです。
    この「ExportTask.xml」ファイルに関する説明はAcrobat SDKにはありません。
     
  2. OSがインストールされているC:ドライブへの保存は出来ません
    詳細は、「Acrobat JavaScript における「Safe Path」についての注意事項」を参照。
     

動作確認環境

  • WindowsXP Pro + SP3 +
    Acrobat 8.1.6 Pro + Office 2003 + フルMicrosoftUpdate

サンプル一覧

「PDFをJPEGに変換する方法(Excel VBAサンプル)」への28件のフィードバック

  1. Win XP環境で作業している者です。
    現在,Acrobat 9.0でPDFファイルを上記のようにJPG変換する作業をしています。
    バージョン9.0では,Acrobatのファイルメニューから,「別名で保存」で連番が降られたJPGファイルが出来ます。
    解像度もppi/cm単位で設定出来ます。
    ただ,デフォルトでは,解像度をプルダウンメニューで,何寿類かの特定の解像度しか選べないので,プルダウンメニューで設定したあとで,解像度の数字の部分だけを,200ppi/pxelの数値でcm単位に変えて変換しています。
    ただこの設定ではカスタム設定保存が出来なくて,新規のPDFを処理するたびにデフォルトに戻ってしまいます。
    それと,解像度を200ppi/pxelに設定した後で,解像度は変えずに,pixelだけをUPして,JPGに書き出すスクリプトはどうやって設定するのでしょうか?
    以上の2点の処理で困ってます。
    ちなみに,最後の解像度はそのままに,pixel数をUPして,ドキュメントサイズを大きくする作業は,残念ながらPhotoshopのバッチで処理しています。
    なんせPDFの数が膨大にあるため,なんとかAcrobatで動くVBあるいはJavascriptdで実行出来ないかと思っています。
    ご教授よろしくお願いいたします。

  2. 内容は確認しました。
    現在、この値をどの様な形でAcrobat 9.0が管理しているか調査しています。
    ・レジストリ
    ・C:ドライブのどこかのファイル(xml?)
    しばらくお時間を下さい。

  3. kimさん。遅れましたが、初めまして。
    これまでの中間報告です。
    <1点目>
    Acrobat Pro Extended 9.0
    Acrobat Pro Extended 9.1
    + Office 2003 + Win XP(フルUP)環境
    で確認しましたが、JPEG変換の解像度はカスタム変更してもデフォルトには戻りません。「別名で保存」に問題は見つかりませんでした。
     そこで一度、試して欲しいのですが。メニューから[編集]->[環境設定]->環境設定ダイアログ画面->[PDFからの変換]->[JPEG]で[解像度]を選択して[設定を編集(E)]ボタンでデフォルトの解像度が変更できる?と予想しています。試して下さい。
    <2点目>
     「別名で保存」の設定パラメータ画面にその値が無いので無理かと・・。これに関してはAcrobat側の問題では無く、VBA(VB)側の処理方法だと思います。
     なお、解像度のリスト値が保存されている箇所は見つけることが出来ませんでした。が、再度調査したいと思っています。
     とりあえず、今日はココまで。(汗

  4. pdf (fillable, 入力可能なpdfファイル)から、通常のpdfファイル(入力欄の機能をなくしたもの)への変換は、どのように記述したらよいか、教えてください。

  5. 鹿の楽園 さん はじめまして。

    ここで言っている「入力可能なpdfファイル」とは「テキストボックス、コンボボックス、リストボックス、チェックボックス、ラジオボタン」等の入力操作可能フィールドを持っているPDFファイルと言う事、 更に「入力欄の機能をなくしたもの」とは「入力出来ない状態のPDF」と判断させて頂きます

    それならば AFormAut オブジェクト での操作で各フィールドを更新不可にすればイイと思います。もしそのフィールドが不要ならば削除しても構いません。

    ココのページのサンプルを御覧ください。
    更新不可の場合は、以下の部分を

    For Each objAFormField In objAFormFields
    lCnt = lCnt + 1
    'フィールドのタイプを表示
    Debug.Print "(" & objAFormField.Type & ")"
    Next objAFormField

    こんな感じに変更します。↓
    For Each objAFormField In objAFormFields
    '入力・変更不可にする
    objAFormField.IsReadOnly = True
    Next objAFormField

    削除は上記のループ内でobjAFormField.Typeからフィールドのタイプ(テキスト[text]、ラジオボタン等)を判断して、objAFormField.Nameからフィールド名を取得します。そして、ココのサンプルを元にそのフィールド名でフィールドの削除を行います。

    サンプルは保存してないので、別名での保存等を行う必要は有ります。

    参考になれば幸いです。

  6. 管理人様

    はじめまして。ご回答をありがとうございます。
    ご指定の箇所を「入力・変更付加にする」のとおり書き換えました。
    F8キーで実行すると、

    objAFormField.IsReadOnly = True
    Next objAFormField

    の部分を素通りしてしまい、別名で保存

    lRet_0 = objAcroPDDoc.Save _
    (PDSaveFull + PDSaveLinearized + _
    PDSaveCollectGarbage, _
    "C:\Users\necuser2\Desktop\76\NFPDF00.pdf")

    の箇所を通っても保存されません。

    どこが間違っているのか、教えていただけますか?
    よろしくお願いします。

    鹿の楽園

  7. 鹿の楽園 さんへ。

    >の部分を素通りしてしまい、別名で保存

    「素通り」すると言う事はフィールドが存在しない、と思えます。PDF内にフィールドは存在しているのでしょうか? ココのサンプルの

    Debug.Print "Fields.Count (" & lFieldsCount & ")"

    のlFieldsCount の結果は1以上になっていますか? 0ならば存在しないので当然「素通り」します。

    それと「保存されない」と有りますが、

    lRet = objAcroAVDoc.Close(1)

    の部分を置き換える必要が有ります。更に、lRet_0 の値(終了コード)が正常終了しているかの確認が当然必要です。サンプルですから、全てのエラー処理は入っていません。

    更に、(タブンですが)

    >lRet_0 = objAcroPDDoc.Save _

    の objAcroPDDoc変数(=オブジェクト) はサンプル上の objAcroAVDoc オブジェクトと連携しているでしょうか? 上記の Save メソッドを実行する直前に連携図に従って、

    Set objAcroPDDoc = objAcroAVDoc.GetPDDoc

    を実行する必要が有ります。これでobjAcroAVDoc オブジェクトとobjAcroPDDocオブジェクトが連携し、objAcroPDDoc.Saveメソッドが正常に動作します。

    「オブジェクトの連携」とは各変数内の「情報の受け渡し」を意味します。
    objAcroAVDocで処理した結果をobjAcroPDDocで処理させたい時は上記の様に連携図に従って、情報の受け渡し用のメソッドを実行する必要があります。しないと何を処理してイイのか各オブジェクト(変数)は判りません。

    ご確認ください。

  8. 管理人様

    ご回答をありがとうございます。
    確認したところ、テキストフィールドは多数(20箇所以上)ありますが、debug.printの表示では、fields.count (0)となります。
    素通りの原因はこれでしょうか?

  9. 鹿の楽園 さんへ。

    ココのサンプルを使っているという事は objAcroAVDoc.Open で正常にPDFファイルをオープン出来ているという事です。
    そして、
    >・・テキストフィールドは多数(20箇所以上)・・
    あるにも関わらず objAFormFields.Count の結果が ゼロ という事は、
    鹿の楽園 さんの言うフィールドとコチラが思っているフィールドの意味が「違う」みたいです。

    ココのページで説明しているテキストフィールドなのでしょうか?
    もしそうならば、ココのサンプルとかなり異なるロジックか、予想も出来ない現象が発生している事になります。
    もう一度、ココのコメントを読み直して、再度トライください。

    >素通りの原因はこれでしょうか?

    ゼロならば当然 VBAの「For Each」文はループしないです。VBAのヘルプでFor Each文をご残照ください。

    問題が無ければ、ソースが見たいです。
    (コメント投入時に403等のエラーが発生する時はソースを全て全角文字に変換して下さい)

  10. 管理人様

    とりいそぎ、使用しているfillable PDFのサンプルです。
    この他にも数点使用しておりますが、

    https://www.*****/sites/default/files/patents/process/file/efs/guidance/updated_IDS.pdf

    が典型例です。
    入力可能な欄と、それを追加するボタンを持つファイルです。
    ソースコードは別途ご連絡します。

    時差の都合(EST)で、変な時間帯に回答してすみません。

  11. 鹿の楽園 さんへ。

    サンプルPDFのご提供、ありがとうございます。
    「謎」は解けました。
    ソースのご提供は不要です。

    <これ以降は長文です>

    ▼ 結論(から):入力無しPDFにする方法
    手作業で行う場合です。該当PDFをAcrobat又はAcrobat Readerで開きます。そこから印刷します。但し印刷時はPDFファイルとして印刷します。そうする事で「入力無しのPDFファイル」に変換できます。
    以下が結果です。ご確認ください。
    updated_IDS-print.pdf

    ▼ 今までの方法で出来なかった原因:
    ご提供頂いたサンプルPDFはAcrobatで作成したファイルではありません。Adobe社の LiveCycle Designer というソフトで作成したものです。拡張子がPDFになっているのはそのファイルを使用して表示、更にフィールドへの入力とボタン操作を行うのはAcrobat又はAcrobat Readerだからと思われます。
    このLiveCycle Designer というソフトはAcrobat 8、9等のPro版ではインストール時に同時インストールされる別物のソフトです。(Acrobat XI Proではインストールされません) 詳細は「Adobe LiveCycle Designer」でネット検索してください。
    実際にサンプルPDFをAcrobat XI で編集しようとしたら「このフォームはAcrobatで編集できません。このフォームを編集するにはAdobe LiveCycle Designer を使用してくたさい。」のエラーで拒否されました。つまり当サイトで紹介しているAcrobat OLE(IAC)では完全に操作できないという事になります。

    ▼ プログラミングでの変換方法
    しかし、プログラミング操作出来ないわけでは無いです。以下は大まかな手順だけです。

    ①.OSのデフォルトプリンターを「Adobe PDF」又は「Microsoft Printer to PDF」等に変更します。
    コマンド:
    rundll32.exe printui.dll,PrintUIEntry /y /n "[プリンタ名]"
    上記コマンドの説明サイト:http://qiita.com/rohinomiya/items/43f92cfcd19daa859425

    ②.ココのサンプルを参考にサイレント印刷を行う。

    ③.PDFファイトへ印刷する為の「保存ダイアログ」が表示されるのでファイル名の入力を行う。このダイアログはAcrobat側が出しているのでは無く、OS側が出していることに注意してください。

    ①と②は問題無いです。③の部分は当サイトへの質問でも過去に何度も有った部分です。この部分をAcrobat OLE+Excel VBAだけで自動入力する事は簡単に出来ません。理由は保存ダイアログが出るきっかけはプログラミングが起こしましたが、ダイアログ画面の表示は制御が離れたWindowsのOS側が要求しているからです。よって、通常のプログラミングからの制御は出来ません。
    そこでWindows APIを駆使してPDFファイル名の自動入力を行います。と言いたいですが、実際はかなり難しいのが現実です。ココは自動化ツールを使ったほうが低コストです。 AutoItは自動化ソフトとしてはかなり有名で、商用利用も含めてフリーでの使用が可能になっています。 しかも、Excel VBAから直でプログラミング操作が出来ます。当サイトにも使用サンプルが有ります。他のネットにもサンプルが有るので参考になると思っています。
    確か、Autoitのランタイムだけの配布も許されていた様な気がするのでExcel (VBA)ファイルと一緒に配布できるかもしれません。但し、動作環境として許されればの話です。
    (※この部分は質問が多い箇所なので、本サイトとは無関係ですが、解決策の1つとしてAutoitのVBAロジックを近日公開します。)

    それとWindowsとAcrobatのバージョンをお知らせください。

    以上、ご検討ください。

    ▽ サイト管理人のメモ ※見なくても結構です。
    ・Adobe LiveCycle Designer にOLE機能を見つけれなかった。よって、Excel VBAからAdobe LiveCycle Designer を操作する事は出来ない。
    ・Windows 10 64bit環境下でのWindows APIの操作に使用制限が掛かっている気配が有る。また動作環境のWindowsとAcrobatのバージョンによりロジックが変わるかもしれない。よってWindows APIによるプログラミングは避けたい。
    ・Adobe LiveCycle Designer 作成のPDFをAcrobat OLEで操作出来ない事はチョット納得できない。同じメーカーで基本的なファイル構造(XML)も同じならば操作出来るようにするのがスジ!(コラコラ
    ・Autoitだけでも全て出来てしまうが、どうしようかな~。

  12. 管理人様

    ありがとうございました。なぜうまくいかないか、やっと分かり始めました。

    環境
    OS: Windows 7 Professional SP1
    System: Dell Optiplex 7010 64-bit, 8GB RAM
    (英語用のwindowsでむりやり日本語を使う)

    Adobe acrobat X 10.1.16.13

  13. 鹿の楽園 さんへ。
    もう、このコメントを見てないかもしれませんが、続きを書かせてもらいます。それと長文です。

    この4日程を掛けて、今回の「PDFへの印刷」に関する方法を最初から見直しました。その結果をお知らせします。

    ▼結論(概略のみ)
    全てをプログラミング操作で「全」自動化するのは今回は見送ります。
    可能と思われる技術的な面をイロイロと調査+検討+テストしましたが、きれいな解決に至らなかったからです。正確には「たどり着けなかった」と思っています。但し問題部分を運用面でカバーして、連続で機械的な作業部分のみをプログラミングとします。

    ▼詳細な手順
    以下の①、②、④は手作業での運用部分です。

    ① コントロールパネルから「プリンターとデバイス」を表示して、「Adobe PDF」を「通常使うプリンター」に設定する。
    ② 「Adobe PDF」の「印刷設定」を開いて、以下の2点を変更します。
    ・「Adobe PDF 保存先フォルダー」の「参照」ボタンで保存先フォルダを指定します。
    これでPDFファイルの保存ダイアログ画面は出なくなります。
    ・「結果の Acrobat PDF を表示」のチェックを外します。
    これで印刷後のPDFが画面表示されなくなります。

    ③ この後で以下のサンプルを実行します。前回紹介したサンプルよりもAcrobatアプリケーションがデスクトップに表示されない分、高速に動作します。

    001 Option Explicit
    002
    003 Sub Test_Main_nnn2PutPdfFileName()
    004 Dim bRet As Boolean
    005 bRet = nnn2PutPdfFileName( _
    006 "I:\Adobe\\updated_IDS.pdf")
    007 End Sub
    008
    009 Private Function nnn2PutPdfFileName( _
    010 ByVal sPdfFilePathInput As String) As Boolean
    011 On Error GoTo Err_nnn2PutPdfFileName:
    012 nnn2PutPdfFileName = True
    013 '▼PDFファイルをサイレント印刷
    014 Dim objAcroApp As New Acrobat.AcroApp
    015 Dim objAcroAVDoc As New Acrobat.AcroAVDoc
    016 Dim objAcroPDDoc As New Acrobat.AcroPDDoc
    017 Dim lPageCount As Long
    018 Dim lRet As Long
    019
    020 'Acrobat アプリケーションを起動
    021 ' ※先にメモリにロードしないとエラーが出る場合が有る為
    022 ' lRet = objAcroApp.Show
    023 'アプリケーションを隠す
    024 ' ※デスクトップ上に表示すると処理が遅くなる為。
    025 lRet = objAcroApp.Hide
    026
    027 'PDFファイルを開いて表示する
    028 lRet = objAcroPDDoc.Open(sPdfFilePathInput)
    029 If lRet = False Then
    030 MsgBox "AcroExch_PDDoc_Open エラー:" & vbCrLf & sPdfFilePathInput
    031 nnn2PutPdfFileName = False
    032 GoTo Skip_nnn2PutPdfFileName:
    033 End If
    034 'ページ数を取得する
    035 lPageCount = objAcroPDDoc.GetNumPages()
    036
    037 Set objAcroAVDoc = objAcroPDDoc.OpenAVDoc("")
    038 'PDFファイルの頁を指定して印刷する。
    039 lRet = objAcroAVDoc.PrintPagesSilent(0, lPageCount - 1, 2, 0, 0)
    040
    041 Skip_nnn2PutPdfFileName:
    042 On Error Resume Next
    043 'PDFファイルを閉じます。
    044 lRet = objAcroAVDoc.Close(1)
    045 objAcroApp.CloseAllDocs
    046
    047 lRet = objAcroApp.Exit
    048 'オブジェクトを強制解放する
    049 Set objAcroAVDoc = Nothing
    050 Set objAcroPDDoc = Nothing
    051 Set objAcroApp = Nothing
    052 Exit Function
    053
    054 Err_nnn2PutPdfFileName:
    055 MsgBox "nnn2PutPdfFileName Runtime Error:" & vbCrLf & _
    056 Err.Description, vbCritical, "実行エラー"
    057 nnn2PutPdfFileName = False
    058 GoTo Skip_nnn2PutPdfFileName:
    059 End Function

    ④ 処理が全て終わったら、再度、コントロールパネルから「プリンターとデバイス」を表示して、「通常使うプリンター」の設定を元に戻します。更に「Adobe PDF」の「印刷設定」の変更点も元に戻します。

    ▼詳細な理由
    手作業による運用面を導入した理由を書きます。

    1. AutoIT等の自動化ツールを使って、アプリケーションのデスクトップ操作は自動化出来るが、速度面で著しく問題が有りすぎる。また環境面で失敗する事も考えると、自動化の部分のプログラミングが複雑になってしまう。
    2. コントロールパネル「プリンターとデバイス」で「Adobe PDF」の「印刷設定」の変更先になるレジストリの場所は判った。しかし、先にレジストリを変更してもその結果が「印刷設定」画面には反映されない。Windowsを再起動しても駄目。テスト結果から総合的に判断すると「コントロールパネル」>「プリンターとデバイス」>「Adobe PDF」>「印刷設定」の結果はレジストリに書き込まれるが、更に別の場所にも書かれる。「印刷設定」画面の内容はその別の場所から持ってくる。
      ※この判断に3日。たぶん何かを見落としている、かも、・・しれない。
    3. 運用面のカバーでプログラミングの作成と保守コストを2~3割以下に出来る。
    4. プリンターの「通常使うプリンター」設定はプログラミングでもカバー出来る。しかし運用で「印刷設定」画面を開くので、その時についでにマウスのワンクリックで変更できる。よって、これも運用面に入れてします。

    ▼備考

    1. Acrobatのメニューでの印刷から「印刷設定」へのアクセスは自動化ツールでも出来るが、印刷の度に変更しないといけない。その変更結果はレジストリに反映されない。「印刷設定」の変更を一度の操作で終らせる事が出来るのは「コントロールパネル」>「プリンターとデバイス」>「Adobe PDF」>「印刷設定」だけ。
    2. 「プリンターとデバイス」は「ファイル名を指定して実行」で control printers で起動できるが、この後の操作がプログラミングで操作出来ない。
    3. 「Microsoft Print to PDF」は必ずダイアログ画面が表示される。設定は無い。

    ▼「Adobe PDF」>「印刷設定」のレジストリ情報

    1. 「結果の Acrobat PDF を表示」
      「Adobe PDF の保存先を確認」から指定フォルダに変更する。
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Adobe PDF\PrinterDriverData
      "PromptForFileName"=dword:00000001
      ※「Adobe PDF の保存先を確認」に戻すと0になる。
      更に以下の場所にもその時の保存先フォルダ名が書き込まれる。
      [HKEY_CURRENT_USER\Software\Adobe\Acrobat Distiller\11.0\AdobePDFOutputFolder]
      @=dword:00000002
      "2"="D:\\Temp"
      dwordの00000002は"2"を指してる。
      「11.0」部分はAcrobatのバージョン番号で変わる。
    2. 「結果の Acrobat PDF を表示」
      チェックを外すと1になる。チェック時は0になる。
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Adobe PDF\PrinterDriverData
      "ViewPrintOutput"=dword:00000001

    ※まだまだ、次回の為に、書き残さないといけない、技術メモ+疑問点+再調査事項+再テスト+まとめ等が山ほどあるが、・・・。後日、時間が出来た時に追加します。 (疲)今日はもう、寝ます。

  14. 管理人様

    どうもありがとうございました。
    教えて頂いたとおりにプリンタを設定し、上記プログラムを動作させたところ、正常にPDFファイルが作成されました。印刷ダイアログボックスも自動で進み、クリックや入力は不要でした。
    これで十分に対応可能です。あとはこちらの環境に合わせて少し変更を加え、他のファイルとマージするコマンドを追加する予定です。

    私にはシステムアドミンの権限が与えられていないため、AutoITの導入は少々躊躇っておりました。後に問題が発生した際に対処しきれない場合があります。
    (前任のマネージャが帰国して依頼、誰もアドミンのアカウントとパスワードを知らないという最悪自体に陥っていますが(汗))

    お時間を使わせてしまい申し訳ありませんでした。なんとお礼を申し上げてよいか分かりませんが、本当に助かりました。
    ありがとうございました。今後ともよろしくお願いします。

    鹿

  15. 久しぶりに舞い戻ってきました。
    JavaScriptオブジェクトを作成し、jpegファイル保管。
    Set jso = objAcroPDDoc.GetJSObject
    jso.SaveAs DirTemp & filename & ".jpeg", "com.adobe.acrobat.jpeg"

    こんな感じで jpeg 変換した際に Acrobat側で「画像が大きすぎて出力できません」とエラーがでて、そのページが欠落して連番で複数ページが出力されます。このエラーを回避して画像を出力するほうがないでしょうか・・・。

  16. たいよ さんへ。
    このエラーの回避方法を検討してみました。

    一旦、PNGファイルで出力してはどうでしょうか?
    jso.SaveAs DirTemp & filename & ".png", "com.adobe.acrobat.png"
    ※上記でエラーが出ないことを祈りたい。

    その後で、jpgファイルへ変換する。
    二度手間ですが、今考えられる方法は上記です。

    処理時間が問題視される場合は、ページ欠番が有る時(=エラー時)だけ、上記の処理をする、と言う手も考えられます。

    ご検討ください。

    ▼2022-0915 9:45 追加
    Popplerのpdftocairoを試しました。言語ファイルを指定すれば、正しく変換できるみたいです。
    pdftocairo -jpeg AA.pdf D:\OUT\BB.jpeg
    ※今は時間が無いので、正確には検証できてない。

  17. たくさんのアプローチありがとうございます。
    まず、PNGの件、アプローチしてみます。
    ページ欠番の場合、その分をスキップする処理は実装しました。
    その場合の課題は、Acrobat側がメッセージダイヤログを残したままになるので、処理が中断してしまうんです。VBA側から、Acrobatのエラーメッセージを抑止できればいいんですが・・・。
    あと追記もありがとうございます。

  18. 管理人さん
    かなり以前に教えていただいき大変に助かっている者です。
    また教えていただけますか?

    pdfを図変換するコードなのですが、アクロバットのアップデート後にエラーになるようになりました。
    「ファイル書込み中にエラーが発生しました。ディスク容量が不足している可能性があります」
    というメッセージが出ます。

    (使用しているコード)
    PDdoc.GetJSObject.SaveAs パス & "\" & 図ファイル & ".png", "com.adobe.acrobat.png"
    (パソコンver)
    2019
    (アクロバットver)
    2022.003

  19. 管理人さん
    再送です。
    かなり以前に教えていただいき大変に助かっている者です。
    また教えていただけますか?

    pdfを図変換するコードなのですが、アクロバットのアップデート後にエラーになるようになりました。
    「ファイル書込み中にエラーが発生しました。ディスク容量が不足している可能性があります」
    というメッセージが出ます。

    (使用しているコード)
    PDdoc.GetJSObject.SaveAs パス & "\" & 図ファイル & ".png", "com.adobe.acrobat.png"

    (パソコンver) 2019
    (アクロバットver) 2022.003

  20. 天野 さんへ。

    1.一旦、OSを再起動してください。
    2.「.png」が「.png」(.は全角文字)となってないかを再確認して下さい。
     出力先のファイル名の拡張子を間違えるとエラーになります。
    3.SaveAsは昔の仕様ではCドライブ出力はエラーになります。
     出力先をCドライブ以外に下さい。Cドライブ以外が無いときは一時的にUSBドライブ等にしてください。
    4.それでも駄目な場合は、出力先の「フォルダ名+ファイル名」に日本語文字が無い状態で試して下さい。

    Acrobat 2022のアップデートで何らかの仕様変更があったのかもしれません。(予測

  21. 管理人さん
    返答ありがとうございます。
    上記の件、USBドライブ以外は確認しましたがエラーがでます。
    このマクロは3台のマシンで5年程前から使用しています。
    うち1台は1~2年ほど前に同じエラーがで、つい先日に他の1台もエラーとなりました。
    アクロバッドver10.1.16が入っているマシンでのみ動く状態です。

    USBを調達してUSBドライブも試してみます。

  22. 天野さんへ。
    ココに似た様なエラーが有りました。
    これを参考にします。

    Adobe Acrobatの保護モードを無効(オフ)にします。以下が手順です。
    1.Acrobatのメニュー「編集」->「環境設定」を選択します。
    2.環境設定の右側「セキュリティ(拡張)」を選択し、「起動時に保護モードを有効にする」チェックをオフにします。
    3.メッセージが出たら「はい」を選択し、最後に環境設定の「OK」を押し、Acrobatを終了します。
    4.PCを再起動します。

    こちらはAcrobat 2022の環境が無いので、ネット上の情報を参考にしました。解决できることを祈っています。(願

    ▼追加
    駄目な場合は他のセキュリティ設定を片っ端からオフにして見て下さい。(汗

  23. 管理人さん
    動きました!
    ありがとうございます。
    とても助かりました!

    さすがに英文サイトは速攻でパスでした。
    次回なにかあったら英文でもじっくりと解読してみます。
    自分でできることをやっていだいたようで申し訳ありません。
    ありがとうございました。

  24. 天野 さんへ。
    良かったです。

    この保護モードですが、最近、チョクチョク話題になる部分みたいです。突然(Update後)、デフォルトがオン(有効)になってトラブルになっている話もチラホラ。
    ココに「保護モードは、悪意のあるファイルの実行内容やアクセスを制限することで、ユーザーを保護します。」と書かれていますが、有効にする場合の影響が全く不明です。

    とりあえず、解決ですネ。v(^_^)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


★ 文章での質問は難しいですよネ。でも、早く解決して、家に帰りたい。


SAMURAI Plugin

コメントをする時は出来れば以下もお願いします。

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン
コメントにサンプルコードを入れる時はコードを全て全角文字列にしてください。コチラで半角に戻します。それでもエラーが回避できない時はコメント下さい。個別に対処します。



お仕事で当サイトを見ている方へ
考え込んだら、ご質問下さい。
一緒に解決策を考えましょう。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください