Acrobat とPDF を Excel VBAから操作する関数とサンプルの一覧です。
関数
当サイトで汎用的に使える共通関数を紹介します。
- 関数:「PDFのバージョン」を取得する
- 関数:PDFファイルを完全にチェックする
- 関数:Acrobat , Adobe Reader のインストールパスとバージョンを取得
- 関数:PDFを特定のフォーマットに変換する
- 関数:PDFからメタデータ(XMP)を抽出する
- 関数:PDFの文書プロパティ(概要)を更新
タイトル、サブタイトル、作成者、キーワード、著作権情報 を更新します。 - 関数:Windows のデフォルトプリンターを取得
デバイスに登録されているプリンターの一覧も取得します。 - 関数:Adobe PDFの印刷設定を取得
- 関数:通常使うプリンターを設定
- 関数:レジストリの操作(Regコマンド版)
- 関数:検索した文字列のページ番号と座標を返す
- 関数:全頁を行単位のテキスト、ヘッダー、フッターで返す
サンプル
- PDFの文書プロパティ「開き方」タブを変更する。
上記はコメントの部分にそのサンプルが表示されています。
文書プロパティの以下を変更する事が可能なサンプルです。- 「レイアウトと倍率」 の [表示], [ページレイアウト], [倍率], [開くページ]
- 「ウインドウオプション」 の [ページにウインドウサイズを合わせる], [ウインドウを画面中央に配置], [フルスクリーンモードで開く], [表示]
- 「ユーザーインターフェースオプション」 の [メニューバーを非表示], [ツールバーを非表示], [ウインドウコントロールを非表示]
- 未テストですが文書プロパティの他の項目の変更も出来るかもしれません。
- Excel:PDFの文書プロパティを表示する
- PDFの表紙のサイズと、他の頁サイズ(x,y)が同じかチェックする
全頁が同じサイズかをチェックする、と同じ。 - 画像だけのPDFファイルかをチェックをする
- 「透明テキスト付きPDFファイル」を「画像文字だけPDF」に変換する方法
- PDFを HTML に変換する方法 (その1)
- PDFを HTML に変換する方法 (その2)
- PDFを HTML に変換する方法 (その3)
- PDFを HTML に変換する方法 (その4)
PDFファイルをHTMLに変換するにはこの方法がベターでしょう。 - PDFを HTML 3.2 に変換する方法
- PDFをHTMLへ変換する上でのイメージファイルを扱う注意事項
- PDFをWORDに変換する方法
- PDFをRTFに変換する方法
- PDFをXMLに変換する方法
- PDFをEPSに変換する方法
- PDFをJPEGに変換する方法
- PDFを PNG に変換する方法
- PDFをテキストファイルに変換する方法
- PDFをテキストファイルに変換する方法(その2)
- VBAでPDFファイルをPDF/X-1a:2001形式に変換出力
- PDFにページ番号を追加する方法
- 透かしをファイルで追加する (addWatermarkFromFile)
別ファイルを透かしと使ってPDF文書に追加する - 透かしを追加する (addWatermarkFromText)
テキストで透かしをPDF文書に追加する - Acrobat のアクション、バッチ処理を実行する (Acrobat 6~10)
Acrobat のアクション(バッチ処理)を実行し、終了まで監視操作する。 - しおりを追加する (createChild)
追加した しおりをクリックするとページ移動する - PDFをWEBブラウザでしか表示出来ない様する (this.URL使用)
- Adobe Reader で PDF ファイルを表示 / 印刷する方法
- Delphi(デルファイ,デルフィ)言語からの使用方法
- 印刷設定の変更と復元
プリンターの印刷設定をバックアック、復元するサンプル - PDF上のテキストとその座標
- テキストにリンクを追加
- テキストのリンク数をカウント
- テキストのリンクを削除
- 注釈:ハイライト表示の追加、削除、変更、一覧
- PDF上に罫線と座標を表示
Acrobatアプリケーション本体の環境設定を変更するサンプル
※メニュー操作で[編集(E)]->[環境設定(N)]
- [分類/ページ表示]の[ズーム]を変更する
- Acrobat本体の環境設定の「データ量の多い画像を表示」設定をオフにする
- Acrobat本体の環境設定の「グリーギング」設定をオンにする
- Acrobat本体の環境設定の「グリーギング」設定をオンにし、8ポイント文字以下はグリーギング状態にする
Acrobat OLE (IAC) 以外からの操作
IAC からだけでは限界があります。そこでVBAから起動連携が出来る、少し有効なソフトと思われるものを一部紹介します。
- 関数:コマンドラインの起動
Poppler の pdfinfo.exe をコマンドライン起動して、 PDFファイルの各種の文書情報を取得するサンプル付きです。
Qpdf
PDFへの高度なセキュリティ設定が出来るコマンドラインのフリーソフトです。業務ソフトではなく、PDFの開発者向けソフトで有る点が特徴です。このソフトの紹介はココです。
- Qpdf :PDFのパスワードとセキュリティ設定を解除するVBA関数
- Qpdf :PDFにセキュリティを設定するVBA関数
- Qpdf :PDFにパスワードとセキュリティ設定をコピーするVBA関数
- Qpdf :PDFのセキュリティ設定を取得するVBA関数
Poppler
Xpdf 3.0 をペースに機能拡張したコマンドラインのフリーソフトです。PDFからメタデータ、各種セキュリティ設定、添付ファイル、フォント、テキスト等の情報を抽出します。更にHTML、各種画像への変換もできます。このソフトの機能を使っているソフトが今増えています。このソフトの紹介はココです。
Xpdf
コマンドラインのフリーソフトです。PDFからメタデータ、各種セキュリティ設定、添付ファイル、フォント、テキスト等の情報を抽出します。更にHTML、各種画像への変換もできます。開発は2年前に終了してますが、非常に安定動作します。このソフトの紹介はココです。
使用上の注意
- サンプルコードなので、エラーチェックなどはほとんど省いている場合が多いです。
実用時はメソッドの戻り値(lRet)チェック、又はオブジェクトの「is Nothing」チェックは必ずする様にして下さい。 - Acrobatのバージョン、OS環境等を考慮して、必ず必要なテストはして下さい。
- テストの時はタスクマネージャーを起動して、テスト完了後はAcrobatプロセスが消えている事を確認して下さい。
テストミスをするとプロセスが残り、次回のテストに影響する場合があるからです。
備考
- 長さの単位:1mm=約2.8346ポイント
- PDFの座標系はページの左下隅を基点としていますが、注釈の座標はページの左上隅を基点とします。
< TOPへ >
管理人さん
はじめまして。 LA在住の山本と申します。
http://pdf-file.nnn2.com/
をめちゃくちゃ活用させていただいています。
VBA使いです。(その他の言語は殆どわからない。)
1つご存じであれば教えてください。
クリップボードに入っている画像イメージがあります。
1.このイメージをPDF上に貼り付け。
2.貼り付けたイメージを選択。
3.貼り付けたイメージのサイズを変更。
4.サイズが変更されたイメージを若干回転させる。
5.イメージを最終のポジションに移動。
1についてはAPPからMenuItemExecuteでどうにか対応できると思います。が、2-5についてはどのObjectを使えばいいのか、からしき見当がつきません。PDAnnotがあやしいのかな?とは思いますが、いまいちという感じ。 はりつけられたイメージはSTAMP扱いとなっているところまでは、分かるのですが....
ヒントがあれば知恵をめぐんでください。
やま さん はじめまして。
当サイトにはメチャムチャ難問です。
代替案も含めて考えてみます。
※無理だと思うのですが・・
お時間を下さい。
それと、質問です。画像の
Q1)元のサイズは多種多様? 動かした時に分かるのか?
Q2)回転も多種多様?
Q3)移動先も変化する?
事前に分かっている事は無いのかな、事前に準備は出来ないのか、
の質問です。
<2020/03/13 21:09 追加>
先に手作業で何も無いPDF上に画像を貼り付け、サイズや回転をさせた状態で用意します。それをスタンプ用PDFとします。
画像ごとにスタンプ用PDFは複数用意しておきます。
そのスタンプ用PDFを目的のPDFの上(又は下)にスタンプ扱いで貼り付ける。
貼り付けるときは位置やページが指定できます。
コチラ(-stamp-on、-stamp-under、-scale-stamp-to-fit)を御覧ください。
管理人さん
はじめまして。ゆうすけといいます。
Excel VABで、既存のPDF(パスワードなし)にパスワードを設定しようとしています。
Qpdfというツールを使用すればできそうに思うのですが、それを使わずに、既存のオブジェクトだけで処理することは不可能でしょうか?
ご回答いただければ幸いです。
OS名 バージョン:Win7/Win10
Acrobat バージョン:Acrobat9
ツール(Excel等) バージョン:Excel2016
ゆうすけさん はじめまして。
「既存のオブジェクト」=Acrobat OLE(IAC)だけでPDFにパスワードを設定するのは「不可能」です。
機能が存在しません。
Qpdf等の外部ツールが必要になります。
管理人さん
確認遅くなってすみません。
回答ありがとうございます。やはり無理なのですね。
Qpdf等を使用することを検討します。
そのあたりはこちらのサイトを参考にさせて頂きます。
管理人さん
はじめまして、いつも参考にさせていただいております。
ご存じであれば教えていただきたいのですが、読み取ったPDFファイルが、カラーか白黒かグレースケールかを判断したいのですが、実現は可能でしょうか?
たいよ さん
はじめまして。
具体的に何の色なのでしょうか?
ページ、注釈、文字、画像、等。
管理人さん
お返事ありがとうございます。
ページになります。印刷するときにカラーか、グレースケールか、白黒か判断して、どのプリンタに印刷すべきかみたいなことがしたいです。
たいよ さんへ
ここで言う「読み取ったPDFファイル」とは、元はスキャナで取り込む時に「白黒(モノクロ)」、「グレー」、「カラー」を指定して、それをPDFファイル化した物と予想しました。
仮にそうならば、PDFファイルの各ページの内容は画像と言う事になります。
正解ならば、各ページから画像を取り出し、その画像の状態を調べる、と言う事になります。
その画像をOLE経由で直接調べる手段は無いので、画像ファイルとして一旦、ドライブ等へファイル出力するしか手がないように思われます。
画像ファイルの内容が白黒、グレー、カラーのプログラム判断は別にネット検索が必要です。(当サイトにサンプルは無いです)
外れている部分があれば、ご指摘ください。
管理人さん
いつも素早いお返事ありがとうございます。上記内容で正解です。
jpegファイルに書き出してPixelを取得していますので、そのファイルで判断できればよいのですが、Excel VBA で良いサンプルが無いですね。もうちょっと検索してみます。
たいよ さんへ。
気になったのでコチラでもネット検索してみました。VB、VBA等では全く無いです。海外の英語圏でも検索しましたが、検索キーワードが悪いみたいで、これも上手くヒットしません。
視点を変えてみました。他のツール等で判定できないかと。
ImageMagickというGPLライセンスのコマンドライン操作出来る画像処理ソフトがあります。(初めて知るソフト)
このツールを使って「画像がカラーか、白黒かを判別する」のコマンドを実行したところ、抽出したJPGファイルの白黒とカラーの判定が出来ました。例:convert 2021-0221-1Page.jpg -colorspace HSB -separate -delete 0 -fx "u*v" -blur 2x2 -threshold 30% -format '%[fx:mean]\n' info:タブン、コマンドのオプションを変更する事でグレー判定も出来るのではないかと予想しています。コマンドラインで実行できるならばVBAから実行と結果の取得ができます。もっとネット検索すれば使いやすいコマンドラインのツールが見つかるかもしれません。
ご検討ください。
【2021-02-23 19:24 以下を追加】
ImageMagickの以下の「identify -verbose」コマンドを実行します。
>identify -verbose 2021-0221-1.jpg > page1.txt
page1.txtに2021-0221-1.jpg 画像ファイルの詳細情報が出力されます。「カラーモードとチャンネルbit数のまとめ」の情報をもとにPDFページがモノクロ(白黒)、グレースケール、カラーで作成されたかの判定をします。(注意:PDFはスキャナで取り込んだ画像ファイルの場合のみ)
PDFファイルの中身を直接見る方法も有るみたいですが、環境にGhostScriptが必要なので動作は未確認です。
ご検討ください。
【2021-02-24 09:27 リンク先を上記に追加】
管理人さん
ImageMagickについて、詳細ありがとうございます。
(興味を持ってもらってありがとうございます)
ImageMagickで、画像情報を抜き出すことができました。
「Colorspace」「Type」「Depth」などの値の組み合わせをもう少し検証してみますが、これでできそうな気がします。本当にありがとうございます。私のほうで追加情報後日あればフィードバックさせていただきます。
こんにちは
AcrobatProがインストールされている環境で、ExcelVBAからPDFの読み取りパスワードを設定することは可能でしょうか。
上記以外の補助アプリなどは使用しない前提です。
エンドウ さんへ。
補助アプリ等(Qpdf)の使用無しでのパスワード設定の方法は当サイトには無いです。Acrobat OLE(IAC)+Acrobat JavaScriptでは出来そうな気もするのですが、未だにその情報は入手できていません。残念ですが。