AcroExch.PDDoc メソッド一覧

TOP > AcroExch.PDDoc      [...]


一覧

PDFドキュメント全体を現すオブジェクトです。

サイレント(Acrobatを表示しない)で実行されるオブジェクトです。

 

メソッド 解説
AcquirePage 指定されたページを取得し、PDPageオブジェクトを返します。
ClearFlags PDFドキュメントの文書フラグをクリアする。
Close 1つのPDFドキュメントを閉じる。
変更等は反映されません。
Create 空のPDFドキュメント(AcroExch.PDDocインスタンス)を作成します。
CreateTextSelect 指定ページのAcroRectオブジェクトで指定された四角のテキスト範囲をPDTextSelectオブジェクトとして取得する。この後は選択されたテキストをAVDoc.SetTextSelectionメソッドとAVDoc.ShowTextSelectメソッドを使って表示します。
CreateThumbs サムネイル画像をドキュメントの指定された頁範囲に作成します。
CropPages PDFドキュメント内の指定されたページをトリミング(範囲指定で切り取り)します。
トリミング結果が72ポイント(1インチ)未満ならば要求が無視されます。
DeletePages 1つのPDFドキュメントから指定ページを削除する。
DeleteThumbs ドキュメントで指定された頁からサムネイル画像を削除します。
GetFileName このAcroExch.PDDocに関連しているファイルの名前を得ます。
GetFlags 文書フラグを取得します。
文書フラグは合計された状態で返されます。
GetInfo PDFドキュメントのInfo情報の指定されたキーの値を得ます。
最大512バイトは返されます。
ここから文書プロパティの概要タブのタイトル等の値も取得できます。
GetInstanceID ドキュメントのトレーラのID配列からのGetInstanceID GetsインスタンスID(2番目の要素)。
GetJSObject Acrobat アプリ環境内で使用できるAcrobat JavaScript にアクセスするメカニズムのJSObject オブジェクトを提供します。
PDDoc に関連付けられたJSObject オブジェクトを通して Acrobat JavaScript のDoc オブジェクトのメソッドやプロパティを使うことが出来ます。
GetNumPages PDFファイルの頁数を得ます。
GetPageMode PDFドキュメントの初期ページ表示モードを得ます。
注意事項有り。
GetPermanentID ドキュメントのトレーラでID配列から永久的なID(最初の要素)を得ます。
InsertPages 現在のPDFドキュメント内で指定された頁の後に、
別のPDFドキュメントを指定ページ数分だけ挿入する。
MovePage 同じPDFドキュメントの1ページを別ページへ移動させます。
Open 1つのPDFドキュメントをサイレント(画面に表示しない)で開く。
OpenAVDoc Acrobatアプリケーションを起動して、PDFドキュメントを表示する。
同時にこのPDFドキュメントのAVDocオブジェクトも作成する。
ReplacePages 現在のPDFドキュメントをソースPDFドキュメントから指定されたページ数で入れ替える。
リンクもしおりもコピーされないが、テキスト注釈は引数指定でコピー出来ます。
Save PDFドキュメントを保存します。
保存方法の指定が出来ます。
最適化や別名での保存も出来ます。
SetFlags 文書フラグをOLEで使用中のPDFドキュメントにセットします。
SetInfo PDFドキュメントのInfo情報にキーとその値をセットする。
キーが無ければ追加される。
ここから文書プロパティの概要タブのタイトル等の変更ができます。
SetPageMode PDFドキュメントを開いて表示する時の表示方法のモードをセットします。
注意事項有り。

TOPへ

「AcroExch.PDDoc メソッド一覧」への13件のフィードバック

  1. このHPを参考に、PDF文章の結合ができました。大変役にたち、ありがとうございました。それで、その結合した文章で最新のものつまり、最終ページで開きたいのです。
    SetPageModeで、表示方法がセットできますが、開くページを設定するメソッドもしくはプロパティがわかりません。
    よろしくお願いいたします。

  2. kevinさん。初めまして。
    未完成なサイトで申し訳ない状態ですが、少しはお役に立っている事は嬉しいです。
    質問の件ですが、解答は少しお時間を下さい。kevinさんのご指摘の通りOLE(IAC)にはそれに該当するプロパティとメソッドが見当たりません。
    ・AppオブジェクトのSetPreferenceExメソッド
    ・PDDocオブジェクトのGetJsobjectメソッド
    ※Acrobat Java ScriptへのOLE連携
    ・レジストリ? ※論外?
    ・Java Script ※セキュリティ上使いたく無い
    上記4点を中心に調査します。場合によっては別の逃げ手?も考えています。
    しばし、お時間を・・。

  3. 早速のご返事ありがとうございます。
    また、お手数をおかけいたします。
    逃げてとしては、文章を結合するときに、必ず先頭に挿入していくでできそうです。
    (今まで作成した文章を入れ替える必要はありますが・・・)
    ファイル結合例ですが、文章をどんどんスキャナで取り込んでPDFにし、それにIDを振り(個人別)、そのID毎に組み込んでいくというものですが、数十枚の文章が数秒で結合終了します。
    これにはクライアントさんもビックリしています。

  4. kevinさん。返事が遅くなりました。
    お急ぎと思いますので現時点での結論から先に。
    「OLEだけでは出来ません」。(汗
    >文章を結合するときに、必ず先頭に挿入
    その考え方で試してみましたがうまく出来ません。以下参照。
    Sub Test05_ketugo()
    Dim AcroPDDocNew As New Acrobat.AcroPDDoc
    Dim AcroPDDocAdd As New Acrobat.AcroPDDoc
    Dim lRet As Long
    Dim lGetNumPages As Long
    Dim lPages As Long
    Dim i As Long
    lPages = 0
    '空のPDFファイルを作成する
    lRet = AcroPDDocNew.Create()
    '空のPDFファイルに追加する
    lRet = AcroPDDocAdd.Open("E:¥Test01_1.pdf")
    lGetNumPages = AcroPDDocAdd.GetNumPages()
    For i = lGetNumPages To 0 Step -1
    lRet = AcroPDDocNew.InsertPages( _
    PDBeforeFirstPage, AcroPDDocAdd, _
    i - 1, 0, True)
    Next
    lRet = AcroPDDocAdd.Close()
    lPages = lPages + lGetNumPages
    '更にPDFファイルを追加する
    lRet = AcroPDDocAdd.Open("E:¥Test01_2.pdf")
    lGetNumPages = AcroPDDocAdd.GetNumPages()
    For i = lGetNumPages To 0 Step -1
    lRet = AcroPDDocNew.InsertPages( _
    PDBeforeFirstPage, AcroPDDocAdd, _
    i - 1, 0, True)
    Next
    lRet = AcroPDDocAdd.Close()
    '結合したPDFファイルを最後に保存する
    lRet = AcroPDDocNew.Save(1, "E:¥Test01_NEW.pdf")
    lRet = AcroPDDocNew.Close()
    'オブジェクトを強制開放する
    Set AcroPDDocAdd = Nothing
    Set AcroPDDocNew = Nothing
    Debug.Print "完了:" & Now
    End Sub
    逃げ手としては
    lRet = objAcroApp.MenuItemExecute("GeneralInfo")
    で、文書のプロパティ画面を表示してSendKeyで
    ・[Ctrl]+[Home]
    ・[Ctrl]+[Tab] x 3回
    ・[tab] x 4回
    ・最終ページ数をセット
    ・[Enter]
    キーをエミュレートする。※格好悪い!
    もちろん上記ロジックが動作中はパソコンを触れないし、他のアプリも動作させないようにする。
    kevinさんが言う「文章を結合するときに、必ず先頭に挿入」するやり方のロジックを問題が無い範囲で結構ですので一部を見せていただけないでしょうか。結合メソッドは不安定な動作をするモノが一部あるので確認をしたいと思っております。

  5. 最後に追加、先頭に挿入の関数を作成しました。結果は確認しました。
    Kevin
    '-----------------------------------------------------------
    ' BindPDF by Kevin
    ' sNew:組み込まれるPDF(蓄積されるPDF)
    ' sAdd:組み込もうとするPDF
    ' insMode False:最後に結合 True:先頭に結合
    '-------------------------------------------------------------
    Function BindPDF(ByVal sNew As String, ByVal sAdd As String, ByVal insMode As Boolean) As Boolean
    Dim AcroPDDocNew As Object
    Dim AcroPDDocAdd As Object
    Dim lret As Long
    Dim lPageNew As Long
    Dim lPageAdd As Long
    BindPDF = False
    If Not AcroPDDocNew Is Nothing Then 'エラー時に開きっぱなしになる場合がある?
    Set AcroPDDocNew = Nothing
    End If
    On Error GoTo er_proc
    '①sNewの準備:インスタンスの作成
    Set AcroPDDocNew = CreateObject("AcroExch.PDDoc")
    If Dir(sNew) = "" Then 'PDFが存在しない
    '新規作成------------------------------------------------------
    lret = AcroPDDocNew.Create()
    If lret = 0 Then
    MsgBox "Fail to Create!"
    Exit Function
    End If
    Else
    lret = AcroPDDocNew.Open(sNew)
    End If
    'sNnewのページ数を取得
    lPageNew = AcroPDDocNew.GetNumPages()
    If lPageNew < 0 Then
    MsgBox "Fail to GetPageNew!"
    Exit Function
    End If
    '②sAddの準備:インスタンスの作成
    Set AcroPDDocAdd = CreateObject("AcroExch.PDDoc")
    lret = AcroPDDocAdd.Open(sAdd)
    If lret = 0 Then
    MsgBox "Fail to Open!"
    Exit Function
    End If
    'sAddのページ数を取得
    lPageAdd = AcroPDDocAdd.GetNumPages()
    If lPageAdd < 0 Then
    MsgBox "Fail to GetPageAdd!"
    Exit Function
    End If
    '次のコメントに続く

  6. '前のコメントより続く
    '-------------------------------------------------
    '③sNewにsAddを追加する→InsertPages(引数)を利用する
    '-------------------------------------------------
    'insMode = True ’実験用
    If insMode = False Then '最後に追加
    '引数: 追加される側のページ-1, 追加するオブジェクト,開始ページ, 追加するページ数 ,しおりを使用しない)
    lret = AcroPDDocNew.InsertPages(lPageNew - 1, AcroPDDocAdd, 0, lPageAdd, False)
    Else '先頭に挿入
    '引数: 先頭情報=-1, 追加するオブジェクト,開始ページ, 追加するページ数 ,しおりを使用しない)
    lret = AcroPDDocNew.InsertPages(-1, AcroPDDocAdd, 0, lPageAdd, False)
    End If
    If lret = 0 Then
    MsgBox "Fail to InsertPages!"
    Exit Function
    End If
    lret = AcroPDDocAdd.Close()
    If lret = 0 Then
    MsgBox "Fail to Close!"
    Exit Function
    End If
    Set AcroPDDocAdd = Nothing
    '------------------------------------------------------------------------------------------------
    '④登録して実際にPDFを作成する
    lret = AcroPDDocNew.Save(1, sNew)
    If lret = 0 Then
    MsgBox "Fail to Save!"
    Exit Function
    End If
    If lPageNew > 0 Then
    lret = AcroPDDocNew.Close() '新規作成では必要がないらしい?
    End If
    Set AcroPDDocNew = Nothing
    BindPDF = True
    ' MsgBox "追加しました。", vbExclamation, app.title
    Exit Function
    er_proc:
    MsgBox "BindPDF:" & Err.Description, vbCritical, App.Title
    Exit Function
    End Function

  7. Kevinさん。
    ありがとうございます。
    こちらでのテスト結果をお伝えします。
    この関数の使い方のポイントは1点。
    ① 追加PDFの頁数は1頁のみ。
    この条件が変わると「開始ページ」が変わってしまいます。
    条件を変えてテストして別に判った事は、後で追加したPDFの最初の頁が「開始ページ」になっていることです。上記に関す情報をSDKに見た記憶はありません。よって、たまたまそうなった可能性があります。
    ・関数に上記条件①を守るロジックの追加。
    ・Acrobatのバージョンアップ時には再テストが必要な事。
    の2点が今後の課題だと思われます。
    なお、余談ですがAcrbat v7,v8,v9はOLEのメソッドとプロパティの数の変更は無いみたいです。引数内容の追加はありましたが。また、今回の調査結果でJavaScript APIでもAcrobatを完全に制御する事は出来ないみたい(=憶測)と判断しました。

  8. NORITO様
    追試験ありがとうございました。
    複数ページの挿入は想定していませんでした。目的は最後に挿入したページが開始ページになることなので、汎用性はありませんが、目的は達成できました。
    ご指摘の通り、挿入位置および、挿入順序は③をもう少し改造すれば、もっと汎用性のある関数に出来ると思います。
    今後PDF関連でお教えいただくことが出てくると思いますので宜しくお願いいたします。

  9. kevinさんの様な事をしたいメソッドの提供がされてないのが、現在のAcrobat OLE(IAC)の現状です。Acrobatの機能は上がっても、OLE機能はv7から見直しがされてないように感じられます。v9はまだ簡単な調査しかしてませんが、OLEの機能アップは感じられませんでした。国際標準化(ISO)の動きによってはv10が早期に出るかもしれません。その時に期待したいと思っています。
    kevinさん。頑張って下さい。

  10. 初めまして。

    こちらのサイトではいろいろと
    PDFオブジェクトを操作するのに勉強になる情報が多く
    とても重宝させていただいております。

    つきましては
    まだ勉強をし始めたばかりの初心者で
    お門違いな質問でしたら大変申し訳ありませんが
    下記3点ご質問させてください。
    ①Acrobat.AcroPDDocとAcroExch.PDDocの違い
    サンプルコードでは
    Acrobat.AcroPDDocで宣言などしておりますが
    サイトの説明では
    AcroExch.PDDocのメソッド説明などと記載しておりますが
    そもそもこの違いはありますでしょうか。

    ②VBAではなくVB.net
    サンプルなどではエクセルのVBAでのコードが
    よく記載されておりますが
    現在vb.netでのシステム構築に
    このPDFの操作を組み込もうと考えておりますが
    実際のところ考え方は同じでしょうか。
    例)Acrobat Proをライセンス購入の上
      インストールし
      参照設定した後プログラムにて
      AcrobatのOLE操作を行う流れ

    ③Acrobat SDKについて
    Acrobat SDKは
    VBAなどでPDFのOLE操作をするプログラムを
    作成する場合には
    Acrobat Proのインストールだけではなく
    Acrobat SDKも導入しないといけないのでしょうか。
    (開発機だけでなく実際稼働する端末にも必要?)

    ◆OS
    Windows10
    ◆Acrobat
    現在検討中ですが
    最新のAcrobatProを導入予定
    ◆やりたいこと
    対象フォルダに置いている
    PDFファイルをページ単位で分割し
    あらかじめ準備していた
    PDFファイルと複合して
    別ファイルとして保管する
    (自動でこの動作を行う)

    以上なにとぞよろしくお願いいたします。

  11. Kazukiさん はじめまして。

    >①Acrobat.AcroPDDocとAcroExch.PDDocの違い

    同じです。
    「AcroExch.PDDoc」はSDKドキュメン内でよく使われている表現です。当初、当サイトでは「PDDoc」だけにしょうかとも考えましたが、SDK文書での表現を優先しました。
    でも、確かに迷いますネ。スイマセン。(汗

    >②VBAではなくVB.net
    >・・・
    >実際のところ考え方は同じでしょうか。

    「考え方」は同じと思っています。
    VB.Netの開発経験は無いですが、一応、勉強だけは昔しました。移行ウイザードを使う必要も無いと思っています。参照設定は変わるのかな?

    >③Acrobat SDKについて
    >・・・
    >(開発機だけでなく実際稼働する端末にも必要?)

    「実際稼働する端末」にはSDKは不要です。Acrobat Proのインストールだけで結構です。
    SDKには13種のVB.Netのサンプルが入ってます。その部分は開発PCでも使えるはずです。他の(英語の)ドキュメントは、あまりメンテナンスがされている様には見えないので、オススメはできません。でも、時間に余裕が有るのでした参考にはなります。

    >◆やりたいこと

    InsertPagesが参考になります。

  12. >管理人様
    とても丁寧かつ迅速なご回答ありがとうございます。
    とても参考になります。

    今後も
    色々と参考にさせていただきますので
    なにとぞよろしくお願いいたします。

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

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

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



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

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