AcroExch.PDDoc: InsertPages メソッド

TOP > AcroExch.PDDoc > InsertPages      [...]


説明

現在のPDFドキュメント内で指定された頁の後に、別のPDFドキュメントを指定ページ数分だけ挿入する。

形式

VARIANT_BOOL InsertPages(long nInsertPageAfter,
      LPDISPATCH iPDDocSource,
      long nStartPage,
      long nNumPages,
      long bBookmarks);

引数

  1. 第1引数(nInsertPageAfter) :
    挿入を開始するページ番号。このページ番号の後に挿入される。なおページ番号1が0だから、最初は-1となる。ページ番号1は0として扱う。但し、最初のページの前に入れる時はPDBeforeFirstPage(=-1)、最終頁の後に追加する時はPDLastPage(=-2)の定数を指定する事も出来る。数値-1.-2を指定してももちろん構わない。このPDBeforeFirstPageとPDLastPageの定数を扱う時はIAC.BAS標準モジュールの追加が別途必要となる。
  2. 第2引数(iPDDocSource) :
    挿入するPDFドキュメントのPDDocオブジェクト。
  3. 第3引数(nStartPage) :
    挿入するPDFドキュメントの開始ページ番号。1ページ目は0。
    問題点有り。<注意事項>を参照。
  4. 第4引数(nNumPages) :
    挿入するPDFドキュメントのページ数。
  5. 第5引数(bBookmarks) :
    しおりも追加する時はTrue(-1)。追加しない時はFalse(0)。
    問題点有り。<注意事項>を参照。

戻り値

  • -1:成功。
  • 0:失敗。または挿入出来なかった。

動作するバージョン

VersionAdobe
Acrobat
備考
4-Acrobat 4.0    ※Windows 98SE + Excel 2000
5
-
Acrobat 5.0.5
6
-
Acrobat 6.0.3 Pro
7-Acrobat 7.0.9 Pro
Acrobat 7.1.4 Pro
8OKAcrobat 8.1.2 Pro
9-Acrobat 9.3.2 Extended
10-Acrobat X (10.1.8) Extended
11-Acrobat XI (11.0.04) Extended
  • OK = 動作する。
  • NO = 動作しない。 戻り値が0を返す。
  • - = 未確認。

サンプル:ExcelのVBA

説明:2つのPDFファイル(Test01_1.pdfとTest01_2.pdf)を結合して、
Test01_NEW.pdfファイルを作成する。しおりも同時に入れる。

  • F8キーでステップ実行しながら動作確認する。
  • 事前に参照設定を事前にする。
001 Sub AcroExch_PDDoc_InsertPages() 002 003 Dim AcroPDDocNew As New Acrobat.AcroPDDoc 004 Dim AcroPDDocAdd As New Acrobat.AcroPDDoc 005 Dim lRet As Long 006 Dim lGetNumPages As Long 007 Dim lPages As Long 008 009 lPages = 0 010 '空のPDFファイルを作成する 011 lRet = AcroPDDocNew.Create() 012 013 '空のPDFファイルに追加する 014 lRet = AcroPDDocAdd.Open("E:\Test01_1.pdf") 015 lGetNumPages = AcroPDDocAdd.GetNumPages() 016 lRet = AcroPDDocNew.InsertPages(lPages - 1, _ 017 AcroPDDocAdd, 0, lGetNumPages, True) 018 lRet = AcroPDDocAdd.Close() 019 020 lPages = lPages + lGetNumPages 021 022 '更にPDFファイルを追加する 023 lRet = AcroPDDocAdd.Open("E:\Test01_2.pdf") 024 lGetNumPages = AcroPDDocAdd.GetNumPages() 025 lRet = AcroPDDocNew.InsertPages(lPages - 1, _ 026 AcroPDDocAdd, 0, lGetNumPages, True) 027 lRet = AcroPDDocAdd.Close() 028 029 '結合したPDFファイルを最後に保存する 030 lRet = AcroPDDocNew.Save(1, "E:\Test01_NEW.pdf") 031 lRet = AcroPDDocNew.Close() 032 033 'オブジェクトを強制開放する 034 Set AcroPDDocAdd = Nothing 035 Set AcroPDDocNew = Nothing 036 037 End Sub


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

補足

  • 結合時にしおりの階層のトップが元のファイル名として最上位に追加される。要注意。
  • 「挿入するPDFドキュメント」をAcrobat SDKでは「ソースドキュメント」と表現している。
  • 英語サイトで関連サンプルを発見。以下にURLをメモする。詳細は未分析。
    http://www.planetpdf.com/developer/article.asp?ContentID=6232

注意事項

  • 「第3引数(nStartPage):挿入するPDFドキュメントの開始ページ番号」が0以外の時、InsertPages メソッドが失敗する場合がある。必ずではないが、何度も行っていると動作が不安定?になり、InsertPages メソッドが失敗となる。その予防策として予め挿入するPDFドキュメントから余分なページを削除しておき、InsertPages メソッドを実行する時に第3引数(nStartPage)が0になるようにする事を奨める。
  • 第5引数でTrueを指定して「しおりも追加」状態にすると、第4引数が無視され、全頁が挿入される。
  • 上記のサンプルには無いが、追加される方のPDFファイル又は追加する方のPDFのどちらかに、セキュリティ保護(制限)が掛かっている場合は、InsertPages メソッドは失敗 (戻り値= 0) になり、追加は実行されない。

動作確認環境

  • WindowsXP Pro(+ SP3) +
    Acrobat 8.1.2 Pro + Office 2003 + MicrosoftUpdate

戻る

「AcroExch.PDDoc: InsertPages メソッド」への26件のフィードバック

  1. このサイトを利用させていただいているものです。
    サイト内のサンプルを見て、PDFファイルを結合することができましたが、PDFファイルを結合した後、ページ番号を振り直すことは可能でしょうか?
    Acrobat Standard8の「文書」-「ヘッダとフッダ」ではできるのを確認したのですが、これをVBAから操作したいと思っています。
    何か良い方法はありませんでしょうか?
    突然のコメントで申し訳ありませんが、よろしくお願いいたします。

  2. 初めまして。
    ご質問の件ですが、少々お時間を下さい。
    まだ未確認の箇所が多数あるからです。
    最初に確認する予定は
    ・SetPreferenceExメソッドの引数部分です。
    http://pdf-file.nnn2.com/?p=212
    この部分に関する説明はSDKには皆無状態なので再度見直してみます。
    なお、「ヘッダとフッダ」処理に関しては追加時の画面内容から判断すると、ほぼ無理かと予想されます。設定項目が多いからです。この様な処理は現時点ではOLEで見ていません。
    しかし、何とか解決策があるか、考えてみます。

  3. <技術メモ>
    ・http://livedocs.adobe.com/acrobat_sdk/9/Acrobat9_HTMLHelp/wwhelp/wwhimpl/js/html/wwhelp.htm?&accessible=true
    ・Plug-ins and Applications > Developing Plug-ins and Applications > Creating Plug-in and PDF Library Applications > Creating a sample PDF Library application > Contents of the PDF Library SDK > Sample code
    Sample application:addelem
    Description:Shows how to modify existing pages in a PDF file. It adds a footer to each page and shifts the first line of each text run.

  4. <「ヘッダとフッダ」操作の件に関する中間報告>
    ・VBAだけによるOLE操作は有りません。
    ・VBAだけによるDDE操作は有りません。
    ・VBAからOLEのJSObject経由でのAcrobat JavaScript操作は調査中。※資料がネット中を探してもサンプルが見つからない。VBA -> GetJSObjectメソッドでJSObject作成 -> Acrobat JacaScriptをOLE操作・・。しかし、この操作はテストしないと可能か不明。また、バージョンアップ等による影響も不安材料。
    VBAから自動化ソフト(UWSC,WinBatchEh等)を起動してAcrobatを操作する事も検討中。但し、クライアント納品ソフトでは無理・・。

  5. 管理人さまへ
    はじめまして。突然のコメントですみません。
    当方、サイト内のサンプルを参考に、AccessVBAにて
    PDFファイルを結合することができました。
    ありがとうございました。
    ところが、とある環境下で問題が発生したので、ご相談させていただきたく思います。
    <動作確認開発環境>
    ・WindowsXP Pro + SP3 + フルWindowsUpdate
    ・Acrobat 8.1.3 Standard + Office 2003
    同環境下では問題ないのですが、
    作成したアプリケーションを別のPC(AdobetReader9.1インストール済み)で利用したところ
    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
    lPages = 0
    '空のPDFファイルを作成する
    lRet = AcroPDDocNew.Create() ←で強制終了
    ・・・
    で強制終了してしまいます。
    ちなみに開発環境にAdobeReader9.1をインストールしたところ、同じ現象で強制終了しました。
    アプリケーションの追加と削除でAdobetReader9.1をアンインストールしても同じ。
    AdobeReader8.0を再インストールしても同じでした。
    (システムの復元で元に戻しましたが・・・)
    AdobeReader8以前のバージョンを用いているPC
    (というよりAdobeReader9をインストールしていない)
    だと問題なく、PDFの結合はできるようです。
    このような事例とその対応策をご存知でしたら、回答願えますでしょうか?
    以上、よろしくお願い致します。

  6. ふみさん。初めまして。
    質問に答えて頂きます。
    但し、テスト環境(仮想PC)が直ぐに出来ないので経験上の即答の形でさせて頂きます。
    納得出来なければ、再度聞いて下さい。
    >・・別のPC(AdobetReader9.1インストール済み)
    >lRet = AcroPDDocNew.Create() ←で強制
    AcrobatReaderはPDFを作る機能が無いのでAcrobatがインストールされて無いパソコンでは当然このメソッドは無効となるはずです。
    VBA内に
    Sub aa()
    On Error GoTo Err_aa
    ・・
    lRet = AcroPDDocNew.Create()
    ・・
    Err_aa:
    MsgBox Err.Number & ”;” & Err.Description
    End Sub
    な感じでエラーを拾うロジックの追加を推薦します。
    >ちなみに開発環境にAdobeReader9.1をインス・・
    ダブルインストールを行うと最後にインストールしたアプリケーションが優先になります。つまりこの状態では最後にインストールしたAcrobatReaderを使ってOLEとして機能するはずです。選択は出来ないはずです。
    >・・AdobetReader9.1をアンインストール・・
    多分、レジストリの状態が不完全になっていると思われます。※感です。
    結論としては、PDF結合をしたい時はPCにAcrobarReaderではなく、Acrobatがインストールされている必要があります。
    当サイトの情報不足で申し訳無いですが、管理人はこの考え方は正しいと思っています。
    当サイトで紹介しているOLEはAcrobatReaderでは使用できないOLEもあります。
    だからと言って全てのPCにAcrobatをインストールするのはライセンス料の問題で無理があります。
    それで対策ですが・・。
    PDFの結合だけを考えているのならば、GPLソフトの「pdftk」だけで出来ます。コマンドラインでの操作です。これに似たコメント対応を http://pdf-file.jugem.jp/?eid=142 でしていますので一度ご覧下さい。AccessVBAのShell関数でコマンドライン操作が可能だと思います。
    >AdobeReader8以前のバージョンを
    >用いているPC(というよりAdobeReader9を
    >インストールしていない)だと問題なく、
    >PDFの結合はできるようです。
    AcrobatReaderしかインストされてないパソコンと言う事ですね。9.1では無い。
    これは納得できないです。
    テスト環境(仮想PC)を作って確認してみたいと思っています。
    これに関する返答はお時間を下さい。

  7. ふみさん。
    残りの返事をさせて頂きます。
    【テスト環境】※仮想PC上
    1)WindowsXP Pro + SP3+ Office 2003 のExcel
    + Acrobat Reader 8.1.6
    2)WindowsXP Pro + SP3 +Office 2003 のExcel
    + Acrobat Reader 7.0.8
    注)Update 7.1.0が無い為、v7.1.3までのUpdate不可
    上記2つの環境で
    lRet = AcroPDDocNew.Create()
    はエラーになりました。
    エラーコード:429
    エラーメッセージ:AcriveXコンポーネントはオブジェクトを作成できませんでした。」
    これに類似した説明は、http://pdf-file.nnn2.com/?p=224 にも書いています。
    仮にそれでもそのAcrobat ReaderしかインストールされていないPCで稼動したとしたらAcrobat OLE(=IAC)を処理するDLL(AcroPDF.dll?)が何かの拍子に間違ってインストールされているのかも知れません。それか以前にAcrobatがインストールされていたとか。レジストリ関連で不整合が起こってしまった。予想が付きません。
    以上をもって全ての返答とさせて頂きます。

  8. 管理人さまへ
    即レス、ありがとうございます。
    対策を読ませていただき、PDFTK.exe で対応しました。
    プログラムでの結合より、時間がかかるのが難点ですが
    とりあえずこのままいこうかと思います。
    管理人さんからの返答を待って、改善していきますね。
    それと、
    >結論としては、PDF結合をしたい時はPCにAcrobarReaderではなく、Acrobatがインストールされている必要があります。
    に関してですが、AcrobatReaderしかインストールしていないPCでも
    AccessVBAでPDF結合は出来たのですよ。(AcrobatReader8以前が前提)
    確かに納得できないのですが・・・
    (ExcelとAccessの違いかな?)
    ご参考までに。
    なにか分かり次第、また連絡いたします。
    ありがとうございました。

  9. ふみさん。
    >AcrobatReaderしかインストールしていないPCでも
    >AccessVBAでPDF結合は出来たのですよ。
    >(AcrobatReader8以前が前提)
    完全にピュアな仮想PC上のAcrobat Reader 7.0.8環境でAccess 2003のVBAで実行しました。
    AccessVBAでの参照設定は「Adobe Acrobat 7.0 Type Library」だけを追加しました。
    結果は同じくエラーです。
    やはり納得出来ないです。
    ※今夜は眠れそうに無いな~。

  10. >結論としては、PDF結合をしたい時はPCにAcrobarReaderではなく、Acrobatがインストールされている必要があります。
    >当サイトの情報不足で申し訳無いですが、管理人はこの考え方は正しいと思っています。
    前任者に確認したところ、AcrobatProf7をインストールしていたそうです。
    AcrobatReaderのみというのは、わたしの勘違いでした。すみませんでした。

  11. 管理人さん。こんばんは。insert pageメソッドのおかげでやりたいことが実現できました。ありがとうございました!!!

    仕事上やむを得ずプログラムを初めて3か月と間もないですが、このサイトのおかげでしたいことができて本当にうれしいです。コードの意味がよくわからないのが難点ですが・・・。

    で、質問です、、、。

    やりたいことはできたのですが、処理時間がかかるのでもう少しいい方法はないか模索してます。(だいたい60ファイルで10分程度かかります。)観てるとステップ1,2,3で結構時間を喰ってる感じです。

    コードはここで書くと長いので診ていただけるのでしたらメールします。

    ■実現したことは、下記5ステップです。
    1:VBAで差し込み印刷
    2:毎回PSファイルを作成→distillerでpdfに変換
    3:psファイルを削除
    4:insert pageメソッドでpdfを一つのファイルにbinding
    5:bindingしたpdfファイル以外削除

    ■パソコン、ソフトのスペックは下記です。
    excel2007
    adobe acrobat9.3.3
    vista
    cpu: 1.86GHz

    以上

  12. 3と5の処理を最後に一気に出来ませんか。

    この処理をする前に、
    仮の完了メッセージをExcelシート上にあるセルにデカデカとテキスト表示して、3と5の処理を行う。(注意:フォーム画面に表示しては駄目です。)
    ここで心理的に余裕が出来ます。そして、

    ・3を行う時に 「DEL *.ps」 コマンド実行 ※同じフォルダ内にする
    ・5を行う時に 「DEL *.pdf」 コマンド実行 ※同じフォルダ内にする
    ※上記の方が削除処理が速いはずです。Shell関数だったかな?

    4の「一つのファイルにbindingしたPDFファイル」は3と5以外の別のフォルダにしておけば問題が無く、安心です。

    1と2の流れは変える事が出来ないでしょう。

    つまり
    1:VBAで差し込み印刷
    2:毎回PSファイルを作成→distillerでpdfに変換
    4:insert pageメソッドでpdfを一つのファイルにbinding
     x:上記の1,2,4,を繰り返す。
    3:psファイルを「一括」削除
    5:bindingしたpdfファイル以外「一括」削除
    の順で処理をします。

    全てが完了したら、「完了メッセージ」をMSGBOX関数で画面に表示する。
    二段階のメッセージ表示ですが、人間は処理時間が長くても、何かしら処理をしていますよ、とメッセージを少しでも出してあげるだけで、安心します。
    できれば各ファイル処理結果をマルチラインのテキストボックスに「SEQ.NO+時間付きで」1つ1つ詳細に表示してあげると、人間は「ボー」と眺めていて時間を忘れて見ています。
    昔、1時間半掛かる処理を数字で2段階表示してあげたら、「処理が遅い」と言うクレームが消えました。※雑談でした。

    少しは速くなると思います。(多分:汗)
    不明箇所は遠慮無くお聞きください。
    明日は一日中外出しているので、返答が出来るか分かりません。

    ゆっくりと御検討下さい。

    PS:数秒でも早く処理したいのなら、ソースをメール(+添付)で送って頂いても構いません。少しはお役に立てるかもしれません。なお、ソースはサイトに公開しません。

  13. こんばんは。管理人様。

    サイトマップのほうの掲示板を見ていたのでこちらの書き込みに気づきませんでした(汗)。

    方向性を示していただいてありがとうございます。
    さっそくやってみます。

    プログラミングっておもしろいですね。うまくいかないときはイライラしますがうまく動作したときはたまらないです!ただ仕事で使うので絶対に間違えれないのでそれがかなりプレッシャーにはなりますが・・(汗)。仕事改善には抜群の威力を発揮するので、がんばって習得中です。まぁ、所詮アマチュアですけど・・・(笑)。

  14. こんばんは。管理人さん。

    管理人さんの示されたヒントを基にいろいろやってみたのですが、どうも

    distillerにてps→pdfに変換する際時間がかかってる模様です。

    ここだけ抜き出して処理しようとするとなぜかエラーが出ます。
    下記がコードです。
    --------------------------
    'ps→pdfに変換
    i = 2
    Do While Cells(i, 11) ""
    If Cells(i, 12) = "" Then
    Else
    Set pdfDis = CreateObject("PdfDistiller.PdfDistiller.1")
    pdfDis.FileToPDF psFilepath & "\" & Cells(i, 11) & ".ps", pdfFilepath & "\" & Cells(i, 11) & ".pdf", vbNullString
    Set pdfDis = Nothing
    End If
    i = i + 1
    Loop
    ---------------------------------
    エラー内容は、下記が出力されます。
    Run-time error '424':
    object required

    F8でステップすると普通に実行できます。そして普通にPDFファイルが生成されます。(なぜ??)

    良い知恵があればご教授願います。

    ちなみにacrobatからdistillerを起動してpsファイルをpdfファイルに手動で変換すると60個のファイルで約20秒ほどです。この速さが欲しいです。

    (・_・)よろしくお願いいたいます。

  15. 「ps→pdfに変換」は未経験なので、今までの経験を元に予測返答させて頂きます。

    1)一気に実行すると「Run-time error」になる
    2)F8のステップ実行だと問題無し

    2番目のF8だとうまく出来るのはタイムラグが発生しているからでしょう。

    「Set pdfDis = Nothing」の後に
    「Doevents()」を入れてみて下さい。
    それでも駄目な場合は以下のステートメントを入れて下さい。
    Option Explicit ステートメントの後に以下を入れて下さい。以下URLを参照。
    http://pdf-file.nnn2.com/?p=137
    ‘1000ミリ秒=1秒単位で待ち時間を作る。
    Public Declare Sub Sleep Lib “kernel32″ _
    (ByVal dwMilliseconds As Long)
    そして「Set pdfDis = Nothing」の後に
    「Sleep 500」を入れてみて下さい。

    タスクマネージャーを立ち上げると分かりますが、多分実行中は「PdfDistiller」プロセス(=プログラム)が実行されているはずです。※プロセス名は多少違うかもしれない。
    「Set pdfDis = Nothing」で終了する為にメモリから開放を行います。
    しかし、メモリ開放は結構時間が掛かる場合があります。
    F8のステップ実行だと次のCreateObjectまで多少の時間があるので、その間にOSがメモリ開放が出来るのでしょう(※予測)。
    そこで「Doevents()」でCPUを一旦OSに返し、メモリ開放にCPUを無理やり割り当てます。
    しかし、それでも時間が足りないと思われるときは、WindowsAPIで強制的に0.5秒だけVBAを停止させ、その間はCPUがOS側に行くのでメモリ開放に時間が当てれます。

    -------------------------------------------
    しかし、上記のロジックを以下にすこし変更するしたら全ての問題は解決する気がするのですが、どうでしょうか?

    ‘ps→pdfに変換
    i = 2
    '★ココでCreateObjectする
    Set pdfDis = CreateObject(“PdfDistiller.PdfDistiller.1″)
    Do While Cells(i, 11) “”
    If Cells(i, 12) = “” Then
    Else
    pdfDis.FileToPDF psFilepath & “\” & Cells(i, 11) & “.ps”, pdfFilepath & “\” & Cells(i, 11) & “.pdf”, vbNullString
    End If
    i = i + 1
    Loop
    '★ココでNothingする
    Set pdfDis = Nothing

    プロセスによってはCreateObjectをその度に実行しないと駄目な場合がありますが、上記の様に出来るのならば、1~2秒は更に早くなります。
    http://soudan1.biglobe.ne.jp/qa4847920.html
    上記にループ外にCreateObjectを使っているのがあったので出来るような気がします。
    ※DoeventsやSleepを使って処理するのは、環境によりシステム・トラブルになる場合が多々あるのでVBAプログラミング的には『外道』扱いと見られます。(汗

    環境が無いので、あくまでも勘での返答です。
    御検討下さい。

  16. 管理人さん、こんにちは。

    今会社で動作テストしてみました。

    会社のパソコンでのファイル作成時間は2:30程でしたが、上記のプログラムに変更したところ10秒程早くなって2:20程になりました。

    ■会社のパソコンのスペック
    excel 2003
    acrobat 8.2.3
    os xp
    cpu 1.2GHz

    早速家に帰っても検証してみます。(家では大幅に早くなる予感-嬉-)

    ご報告まで。

  17. 管理人さん、お疲れ様です。もちもちです。

    今しがた帰宅して検証してみました。

    なんと、10分→3分になりました(驚き・・・)

    管理人さんの提示されたプログラムの要点は、下記でしょうか?
    ---------------------------------------
    distillerをon

    pdfを作成するloopをまわす

    distillerをoff
    ---------------------------------------
    この on / off を set / nothing でしてるんですね。(多分・・・)つまりsetした機能は使用する間はnothinにしてはいけないということなんですね。

    いまいちプログラムを理解してないので変な日本語になってると思いますがすいません。

    あとは、会社でのスピード(2m30s)に迫るために(あと30s)、いつファイルを消すタイミングなどを管理人さんの提示されたロジックを基に調整していきたいと思います。

    ひとつ難問がありまして、bindingしたpdfをどこに保存するかというもんだいです。pdf作成の際一度pop-upでフォルダー指定をするのですがそれ以外だと使い勝手の問題が生じます。何かいい知恵はありませんでしょうか?

    長文ですみません。

  18. ・「distillerをon」(CreateObject)->処理プログラムをメモリ上に動けるように置く。

    ・「distillerをoff」(Nothing)->処理プログラムに終了指示をし、メモリから消える様に命令を発行する。命令を発行するだけであり、正常終了したかの確認はしないのがポイントです。つまりメモリから消えないうちに「distillerをon」(CreateObject)をすると異常が発生する場合がある。

    CreateObject命令に関する話は一冊の専門書が出てるぐらいですから、結構処理的にはCPUを食っているはずです。現時点では上記の知識程度で十分です。

    >ひとつ難問がありまして・・

    どのようなタイミングでファイルを処理しているかは不明ですが、最後は「名前をつけて保存」のSaveAsメソッドで保存すると予測しています。
    それまでは仮のフォルダを使ってbinding出来ないのでしょうか?
    全て出来上がった時点で正式に保存するフォルダを聞く様にする。
    処理完了のメッセージにもなる様な気がするのですが。

    SaveAsメソッドで注意点があります。
    Cドライブだけは保存できないはずです。
    詳細は以下のURLに明記してあります。
    http://pdf-file.nnn2.com/?p=229
    (かなり忘れている:汗)

  19. 管理人さま
    はじめまして
    サンプルを参考にさせていただいております。
    1点うまくいかなくて困っております。
    PDFを結合すると最初のPDFファイルのしおりとして、頭にファイル名がつかないのですが、2つ目に結合したPDFファイルのしおりは、頭にファイル名がついています。1つ目のPDFファイルもファイル名を先頭に入れたいのですが、何か設定が必要なのでしょうか。

  20. ヒロ さん
    はじめまして

    当ページ・メソッド内容から考えると1番目のPDFファイルのしおりが追加されないのは仕方が無い様な気がします。
    よって、その質問に関する答えの設定は無いです。

    ① 但し、(テストでは未確認ですが)2つ目に結合したPDFファイルのしおりが追加されるのでしたら、ダミーPDFを1つ目にして、2つ目に本来の1番目のPDFファイル、3つ目を本来の2番目のPDFファイル、として処理してはどうでしょうか?
    全てを結合した後でダミー部分のページを削除する。
    逃げ手です。

    ② しおりを追加する (CREATECHILD)
    上記にしおりを追加するサンプルを紹介しています。
    これを参考にしおりの追加+修正が可能かと思います。

    解決できることを願っています。

  21. 管理人さま
    こんばんは。

    早速のご回答ありがとうございます。
    ①で実施してみたところ、見事できました。ありがとうございました。(ダミーにしおりがついていると”DeletePages(0, 0)”では、ファイルは削除されますが、しおりは残ってしまうので、しおりなしのダミーで実施しないといけないようです)
    また、結合した際に作成されるしおり(ルートにできるPDFファイル名のしおり)は、本文の移動先が設定されないため、②でしおりの追加等、結合と合わせてしおりの設定が必要なようです。②について、サンプルを参考にしながら、トライしてみます。

  22. 管理人様
    初めまして。

    VBAでのPDF操作で検索し、このサイトを参考にさせて頂いております。

    EXCELのVBAにてPDFに「レイヤとして取り込み」を行う事は出来ないでしょうか?
    可能であれば、ご教授お願いします。

  23. ryo さん
    はじめまして。

    残念ですが、レイヤー関連の操作に関する情報は当サイトには無いです。
    Acrobatの「アクションウイザード」には「コンテンツ」->「レイヤーを取り込む」と有ります。コチラの方を検討してみてはどうでしょうか。

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

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

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



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

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