PDFにページ番号を追加する方法 (Excel VBAサンプル)

TOP > サンプル / 関数 > *


説明

PDFにページ番号を追加します。

PDFの各ページに読み取り専用のテキストボックスを追加します。
それをフッダー又はヘッダーの様に見せてページ番号を表示します。

応用例:

  1. PDFにフッダー又はヘッダーを追加する。
  2. PDFの各ページの特定位置にテキストを表示する。
  3. PDFの指定ページのみテキストを表示する。
  4. 独自のページ番号形式で上書き表示する。

動作の結果

あくまでも当サイトでの結果です。
必ず自分のパソコンで動作確認をしてください。

Acrobat動作 備考
4 Acrobat 4.0 ※Windows 98SE + Excel 2000 *1
※古いPDFのバージョンはOK!
5 Acrobat 5.0.5 + Excel 2003 *1
※古いPDFのバージョンはOK
6 Acrobat 6.0.6 Pro + Excel 2003 *1
※古いPDFのバージョンはOK
7 OK Acrobat 7.1.4 Pro + Excel 2003 *2 
※レジストリ操作で全面的に可能になる
8 NO Acrobat 8.3.1 Pro + Excel 2003
※当Acrobatバージョンでは全面的に不可
9 NO Acrobat 9.5.2 Extended + Excel 2003
※当Acrobatバージョンでは全面的に不可
10 OK Acrobat X (10.1.4) Extended + Excel 2003
11 OK Acrobat XI (11.0) Extended+ Excel 2003
  • OK : 正常処理する。
  • NO : 動作しない。 又は実行時にエラーになる。
  • *1 : 「PDF のバージョン」によっては正常処理出来ない場合がある。
    詳細は下の 注意 を参照ください。
  • *2 : 処理前のレジストリに以下を追加する必要があります。
    [HKEY_CURRENT_USER¥Software¥Adobe¥Adobe Acrobat¥7.0¥AVAlert]
    [HKEY_CURRENT_USER¥Software¥Adobe¥Adobe Acrobat¥7.0¥AVAlert¥cCheckbox]
    "idocNewerVersionWarning"=dword:00000001

サンプル:Excel VBA

  1. F8キーでステップ実行しながら動作確認して下さい。
  2. 事前に 参照設定(AFormAutの追加版) が必要です。

変数の宣言 Integer は Long でご使用ください。

001 Option Explicit 002 003 Sub AFormApp_Test_01() 004 On Error GoTo Err_AFormApp_Test_01 005 006 Dim i As Integer 007 Dim iPageNum As Integer 008 Dim bRet1 As Boolean 009 Dim bRet2 As Boolean 010 Dim bEnd As Boolean 011 Dim sFilePath_new As String 012 Dim objAFormApp As AFORMAUTLib.AFormApp 013 Dim objAFormFields As AFORMAUTLib.Fields 014 Dim objAFormField As AFORMAUTLib.Field 015 016 '初期値 017 Const sFilePath = "D:\work\sample.pdf" 018 bEnd = True 019 020 'Acrobatオブジェクトの定義&作成 021 'Acrobat 4,5,6の時 022 ' Dim objAcroApp As Acrobat.CAcroApp 023 ' Dim objAcroAVDoc As Acrobat.CAcroAVDoc 024 ' Dim objAcroPDDoc As Acrobat.CAcroPDDoc 025 ' Set objAcroAVDoc = CreateObject("AcroExch.App") 026 ' Set objAcroAVDoc = CreateObject("AcroExch.AVDoc") 027 ' Set objAcroPDDoc = CreateObject("AcroExch.PDDoc") 028 029 'Acrobat 7,8,9,10 の時 030 Dim objAcroApp As New Acrobat.AcroApp 031 Dim objAcroAVDoc As New Acrobat.AcroAVDoc 032 Dim objAcroPDDoc As New Acrobat.AcroPDDoc 033 034 '※CreateObject("AFormAut.App")のエラー 035 '※[429 ActiveXコンポーネントはオブジェクトを作成できません。] 036 '※回避用 / メモリにAcrobatを強制ロードさせる 037 objAcroApp.CloseAllDocs 038 039 '処理対象のPDFファイルを開く 040 bRet1 = objAcroAVDoc.Open(sFilePath, "") 041 042 If bRet1 = False Then 043 MsgBox "AVDocオブジェクトはOpen出来ません", _ 044 vbOKOnly + vbCritical, "処理エラー" 045 bEnd = False 046 GoTo Skip_AFormApp_Test_01: 047 End If 048 049 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc 050 iPageNum = objAcroPDDoc.GetNumPages 051 052 Set objAFormApp = CreateObject("AFormAut.App") 053 Set objAFormFields = objAFormApp.Fields 054 055 For i = 0 To iPageNum - 1 056 'PDFの指定ページにテキストフィールドを追加 057 Set objAFormField = _ 058 objAFormFields.Add("Field_" & i, _ 059 "text", i, 250, 50, 350, 75) 060 061 'テキストフィールドのプロパティ設定(ページ番号) 062 With objAFormField 063 .SetBorderColor "RGB", 1, 1, 1, 0 064 .Alignment = "center" 065 .TextSize = "12" 066 .TextFont = "HeiseiMin-W3-UniJIS-UCS2-H" 067 .DefaultValue = "デフォルトとして設定される値" 068 .Value = "Page - " & (i + 1) 069 .IsReadOnly = True 070 End With 071 072 '設定後に開放 073 Set objAFormField = Nothing 074 Next 075 076 'PDFファイルを別名で保存 077 sFilePath_new = Replace(sFilePath, ".pdf", "_new.pdf") 078 bRet2 = objAcroPDDoc.Save(1, sFilePath_new) 079 If bRet2 = False Then 080 MsgBox "PDFファイルへ保存出来ませんでした", _ 081 vbOKOnly + vbCritical, "エラー" 082 bEnd = False 083 End If 084 085 'PDFファイルを閉じる 086 bRet2 = objAcroAVDoc.Close(False) 087 If bRet2 = False Then 088 MsgBox "AVDocオブジェクトはClose出来ませんでした", _ 089 vbOKOnly + vbCritical, "処理エラー" 090 bEnd = False 091 End If 092 093 Skip_AFormApp_Test_01: 094 On Error Resume Next 095 '変更しないで閉じます。 096 bRet1 = objAcroAVDoc.Close(1) 097 098 'Acrobatアプリケーションの終了 099 objAcroApp.Hide 100 objAcroApp.Exit 101 102 'オブジェクトの開放 103 Set objAFormFields = Nothing 104 Set objAFormApp = Nothing 105 Set objAcroPDDoc = Nothing 106 Set objAcroAVDoc = Nothing 107 Set objAcroApp = Nothing 108 109 If bEnd = True Then 110 MsgBox "処理は正常に終了しました。", _ 111 vbOKOnly + vbInformation, "正常終了" 112 End If 113 Exit Sub 114 115 Err_AFormApp_Test_01: 116 117 MsgBox Err.Number & vbCrLf & Err.Description, _ 118 vbOKOnly + vbCritical, "実行時のエラー" 119 bEnd = False 120 GoTo Skip_AFormApp_Test_01: 121 122 End Sub 123


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


実行結果

PDFに追加されたページ番号
PDFに追加されたページ番号

備考 , 参照先

  1. 当サンプルはAdobe TechNote 文書番号(ID):510690 を参照にして作りました。
    Adobe TechNote 情報ではAcrobatバージョンや動作プラットフォーム(OSバージョン) や使用言語が異なる場合があります。
  2. Adobe TechNote 文書番号(ID):510690 で Visual Basic 6.0 (VB6)のサンプルコードがダウンロード出来ます。
  3. AFormApp の OLE Automation Objects に関する情報(英語のみ)は
    http://partners.adobe.com/public/developer/en/acrobat/sdk/FormsAPIReference.pdf
    109 Page を参照してください。
  4. 実行時のエラーは以下になります。
    -2147220991 現在 Acrobat で文書が開いていません。
    -2147220991 現在 Acrobat で文書が開いていません。

    Set objAFormFields = objAFormApp.Fields
    を実行する時に上記のエラーになります。

動作確認環境

  • Acrobat 4.0 + Office 2000
    +  Windows98SE( + WindowsUpdate)
  • Acrobat 5.0.5 + Office 2003( + SP3)
    +  WindowsXP Pro( + SP3 + WindowsUpdate)
  • Acrobat 6.0.6 Pro + Office 2003( + SP3)
    +  WindowsXP Pro( + SP3 + WindowsUpdate)
  • Acrobat 7.1.4 Pro + Office 2003( + SP3)
    +  WindowsXP Pro( + SP2 + WindowsUpdate)
  • Acrobat 8.3.1 Pro + Office 2003( + SP3)
    +  WindowsXP Pro( + SP3 + WindowsUpdate)
  • Acrobat 9.5.2 Extended + Office 2003( + SP3)
    +  WindowsXP Pro( + SP3 + WindowsUpdate)
  • Acrobat X (10.1.4) Extended + Office 2003( + SP3) 
    + WindowsXP Pro( + SP3 + WindowsUpdate)
  • Acrobat XI (11.0) Extended + Office 2003( + SP3)
    + WindowsXP Pro( + SP3 + WindowsUpdate)

コメント投稿について

  1. AFormAppオブジェクトに関する技術的な質問に返答できる知識を当サイト管理者は持っていません。
    その前提でコメント投稿を開放します。

サンプル一覧

「PDFにページ番号を追加する方法 (Excel VBAサンプル)」への6件のフィードバック

  1. 管理人さん
    こんばんは。
    管理人さんのページ番号追加のサンプルVBAを参考にして、PDFにページ番号を追加しているのですが、変数iをlongに変更しても「32768」以上になるとオーバーフローしてしまいます。
    「32768」ページ以上のPDFにページ番号を追加する方法があるかご教示頂けると幸いです。

    環境
    OS:windows10
    Acrobat11

  2. たけ さん
    はじめまして。

    オーバフローしているのは i 変数だけでは無いです。
    iPageNum 変数も同様です。
    iPageNum 変数もLongにしてください。
    Integer は全て Long に変更してください。
    動作検証済みです。

    解決できることを期待しています。

  3. 管理人さん

    こんばんは。
    早急にご回答頂きましてありがとうございます。
    尚、変数を全てLongにして色々と試行錯誤しているのですがオーバーフローしてしまいます。
    また、オーバーフロー時の変数の型名を「TypeName」で確認しているのですが「Long」と表示されるので「32768」以上でオーバーフローする理由がわかりません。
    ついては度々で申し訳ありませんが、何か解決できるようなきっかけでも構いませんのでご教示頂けると幸いです。

  4. たけさんへ。

    こちらでの検証方法に問題があったみたいです。
    スイマセン。
    オーバーフローが起きる場所は上記サンプルの 55、57 、62 のどの場所でしょうか?
    それが 57(正確には59) だと厄介です。

    Addメソッドはコチラを見て頂けると判りますが、ページ番号を指定する引数は「short pageNum」となっています。
    C言語での short の最大値は32767です。
    つまり、それ以上の値は渡せない事になります。
    たぶん、コレのような気がします。

    「よって、出来ません」では前に進まないので、対策(逃げ道)を考えてみます。
    少々、お時間をください。
    (期待はしないでください。

    ▼▼2019/06/9 10:20 追加▼▼
    他のやり方です。

    1) 「透かしをテキストで追加する
    上記を使ってページ番号を追加するのは他でも見かけます。
    しかし、ページ番号を指定する引数のタイプは一般公開されていません。PDF技術文書にもネットの情報にも有りませんでした。

    2) 「CPDF:-add-text
    機能:ページの指定した範囲にテキスト又は短形枠を貼り付けます。
    テキストにはページ番号を指定するマクロも用意されています。日本語が使用できない問題点は有ります。2ページ目からページ番号1を振りたい時はベイツ番号を使ってください。ソースが公開されていますが、引数のタイプを見る勇気が無いです。

    上記の2つでオーバーフローにならないかは未検証です。
    ※テスト用の32768頁のPDFを作る自信が無いです。

    ▼▼2019/06/9 11:17 追加▼▼
    CPDF:-add-text」を使って、57348頁のPDFにページ番号の追加が出来ました。
    >cpdf -add-text "%Page / %EndPage" PDF-57348-page.pdf -o out-57348.pdf
    表示位置は別のオプションを追加することで設定が可能です。
    ※タブン、今日あたりにポンコツPCが壊れます・・

  5. 管理人さん

    こんばんは。
    返信が遅くなりまして大変申し訳ありません。
    また、色々と検証して頂きましてありがとうございました。
    Acrobatでは32768以上は、ページ番号を指定する引数上、オーバーフローする旨承知しました。
    ご教示頂きましたCPDFにて32768以上のページ番号を採番できることを私も実行して確認しましたので、オプション等調べながらページ番号をふっていきたいと思います。
    PCの負荷等含めて、お手数をお掛けしまして申し訳ありませんでした。

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

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

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



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

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