質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

1回答

9493閲覧

VBAでPDF文書のプロパティ(ページレイアウト)を取得したい

miupuu

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2018/06/28 05:08

編集2018/06/28 06:19

前提・実現したいこと

VBA(Excel)でPDF文書のプロパティを取得したいです。いくつかはうまく取得できているのですが、**「ページレイアウト」**の取得方法が分からず困っています。ページレイアウトには、以下のいずれかの値が設定されているので、これらを数値等で取得したいです。

  • デフォルト
  • 単一ページ
  • 連続ページ
  • 見開きページ
  • 連続見開きページ
  • 見開きページ(表紙)
  • 連続見開きページ(表紙)

使い道ですが、数百あるPDFファイルを読み込み、設定されているページレイアウトに応じて印刷方法(印刷の向きやNアップ)を制御するための判定材料として使いたいと考えています。

補足情報

**「ページレイアウト」**は、Acrobatのメニューから「ファイル」→「文書のプロパティ」の「開き方」タブにあります。
http://pdf-file.nnn2.com/?p=783で紹介されているようなAcrobatアプリケーションの環境設定ではなく、PDFファイルのプロパティの方を取得したいです。

取得できているその他のプロパティ

質問を受けまして、現在取得できているプロパティのコードを掲載しました。

Excel

1Private Sub GetProperty() 2Dim objAcroAVDoc As New Acrobat.AcroAVDoc 3Dim objAcroPDDoc As Acrobat.AcroPDDoc 4Dim objAcroPDPage As Acrobat.AcroPDPage 5Dim objAcroPoint As Acrobat.AcroPoint 6Dim objAcroApp As New Acrobat.AcroApp 7Dim lRet As Long 8Dim fp As String 9Dim i As Long 10Dim bRet As Boolean 11 12fp = "xxx.pdf" 13lRet = objAcroAVDoc.Open(fp, "") 14 15Set objAcroPDDoc = objAcroAVDoc.GetPDDoc 16Set objAcroPDPage = objAcroPDDoc.AcquirePage(0) 17Set objAcroPoint = objAcroPDPage.GetSize 18 19Cells(1,1) = objAcroPDDoc.GetNumPages '★1 20Cells(1,2) = objAcroPoint.x '★2 21Cells(1,3) = objAcroPoint.y '★3 22Cells(1,4) = objAcroApp.GetPreferenceEx(52) '★4 23 24lRet = objAcroAVDoc.Close(1) 25 26Set objAcroPoint = Nothing 27Set objAcroPDPage = Nothing 28Set objAcroPDDoc = Nothing 29Set objAcroAVDoc = Nothing 30 31End Sub

上記コードは、掲載用に少しアレンジしています。★1~3のページ数やページサイズは取得できていますが、★4が取れていない箇所で、このコードではAcrobatアプリケーションの環境設定を取得してしまいますので、ファイルに設定されている値を取得できていません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2018/06/28 05:52

「いくつかはうまく取得できている」コードを提示ください。
miupuu

2018/06/28 06:20

質問の中に「取得できているその他のプロパティ」を追記しました。そちらを参考にしていただけますでしょうか。よろしくお願いいたします。
guest

回答1

0

環境がなくて試せていないのですが、PDDocにGetLayoutModeというメソッドがありそうです。
https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/Acro12_MasterBook/API_References_SectionPage/API_References/Acrobat_API_Reference/PD_Layer/PDDoc.html#PDDocGetLayoutMode11207()
これの戻り値で判断できないでしょうか。
ただこのリンク先のマニュアルが参照設定で使えるActiveXのものとは少し違うようなので見当違いでしたらスルーしてください。

ちなみにAVDocからPDDocを得ているようですが、PDDocから直接オープンできるので次のような作りの方が適しているかと思います。

VBA

1Private Sub GetProperty() 2 Dim objAcroPDDoc As New Acrobat.AcroPDDoc 3 Dim objAcroPDPage As Acrobat.AcroPDPage 4 Dim objAcroPoint As Acrobat.AcroPoint 5 Dim objAcroApp As New Acrobat.AcroApp 6 Dim lRet As Long 7 Dim fp As String 8 Dim i As Long 9 Dim bRet As Boolean 10 11 fp = "xxx.pdf" 12 lRet = objAcroPDDoc.Open(fp, "") 13 14 Set objAcroPDPage = objAcroPDDoc.AcquirePage(0) 15 Set objAcroPoint = objAcroPDPage.GetSize 16 17 Cells(1,1) = objAcroPDDoc.GetNumPages '★1 18 Cells(1,2) = objAcroPoint.x '★2 19 Cells(1,3) = objAcroPoint.y '★3 20 Cells(1,4) = objAcroPDDoc.GetLayoutMode '★4 21 22 lRet = objAcroPDDoc.Close 23 24 Set objAcroPoint = Nothing 25 Set objAcroPDPage = Nothing 26 Set objAcroPDDoc = Nothing 27 28End Sub 29

投稿2018/06/28 07:35

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miupuu

2018/06/29 04:33 編集

GetLayoutMode の箇所で、「メソッドまたはデータメンバが見つかりません。」というエラーが出て、ロジックが通りませんでした >< ちなみに、オープン方法を変更して記載していただいたので、一部以下のように修正して動作させました。 変更前:lRet = objAcroPDDoc.Open(fp, "") 変更後:lRet = objAcroPDDoc.Open(fp)
ttyp03

2018/06/29 05:07

ダメでしたか。すみません。 GetLayoutMode 関数はどうやって使えばいいんでしょうかね。 また時間があったら調べておきます。 Openの指摘はありがとうございます。 やはり動く環境がないと見逃しますね。
miupuu

2018/06/29 05:38

ありがとうございます。引き続きよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問