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の追加版) が必要です。

 

Option Explicit

Sub AFormApp_Test_01()
On Error GoTo Err_AFormApp_Test_01

    Dim i               As Integer
    Dim iPageNum        As Integer
    Dim bRet1           As Boolean
    Dim bRet2           As Boolean
    Dim bEnd            As Boolean
    Dim sFilePath_new   As String
    Dim objAFormApp     As AFORMAUTLib.AFormApp
    Dim objAFormFields  As AFORMAUTLib.Fields
    Dim objAFormField   As AFORMAUTLib.Field
    
    '初期値
    Const sFilePath = "D:¥work¥sample.pdf"
    bEnd = True
    
    'Acrobatオブジェクトの定義&作成
    'Acrobat 4,5,6の時
'    Dim objAcroApp As Acrobat.CAcroApp
'    Dim objAcroAVDoc As Acrobat.CAcroAVDoc
'    Dim objAcroPDDoc As Acrobat.CAcroPDDoc
'    Set objAcroAVDoc = CreateObject("AcroExch.App")
'    Set objAcroAVDoc = CreateObject("AcroExch.AVDoc")
'    Set objAcroPDDoc = CreateObject("AcroExch.PDDoc")
    
    'Acrobat 7,8,9,10 の時
    Dim objAcroApp     As New Acrobat.AcroApp
    Dim objAcroAVDoc   As New Acrobat.AcroAVDoc
    Dim objAcroPDDoc   As New Acrobat.AcroPDDoc
    
    '※CreateObject("AFormAut.App")のエラー
    '※[429 ActiveXコンポーネントはオブジェクトを作成できません。]
    '※回避用 / メモリにAcrobatを強制ロードさせる
    objAcroApp.CloseAllDocs
    
    '処理対象のPDFファイルを開く
    bRet1 = objAcroAVDoc.Open(sFilePath, "")
    
    If bRet1 = False Then
        MsgBox "AVDocオブジェクトはOpen出来ません", _
                vbOKOnly + vbCritical, "処理エラー"
        bEnd = False
        GoTo Skip_AFormApp_Test_01:
    End If
    
    Set objAcroPDDoc = objAcroAVDoc.GetPDDoc
    iPageNum = objAcroPDDoc.GetNumPages
    
    Set objAFormApp = CreateObject("AFormAut.App")
    Set objAFormFields = objAFormApp.Fields
    
    For i = 0 To iPageNum ― 1
        'PDFの指定ページにテキストフィールドを追加
        Set objAFormField = _
            objAFormFields.Add("Field_" & i, _
                "text", i, 250, 50, 350, 75)
        
        'テキストフィールドのプロパティ設定(ページ番号)
        With objAFormField
            .SetBorderColor "RGB", 1, 1, 1, 0
            .Alignment = "center"
            .TextSize = "12"
            .TextFont = "HeiseiMin-W3-UniJIS-UCS2-H"
            .DefaultValue = "デフォルトとして設定される値"
            .Value = "Page - " & (i + 1)
            .IsReadOnly = True
        End With
        
        '設定後に開放
        Set objAFormField = Nothing
    Next
    
    'PDFファイルを別名で保存
    sFilePath_new = Replace(sFilePath, ".pdf", "_new.pdf")
    bRet2 = objAcroPDDoc.Save(1, sFilePath_new)
    If bRet2 = False Then
        MsgBox "PDFファイルへ保存出来ませんでした", _
            vbOKOnly + vbCritical, "エラー"
        bEnd = False
    End If
    
    'PDFファイルを閉じる
    bRet2 = objAcroAVDoc.Close(False)
    If bRet2 = False Then
        MsgBox "AVDocオブジェクトはClose出来ませんでした", _
                vbOKOnly + vbCritical, "処理エラー"
        bEnd = False
    End If
        
Skip_AFormApp_Test_01:
On Error Resume Next
    '変更しないで閉じます。
    bRet1 = objAcroAVDoc.Close(1)
    
    'Acrobatアプリケーションの終了
    objAcroApp.Hide
    objAcroApp.Exit
    
    'オブジェクトの開放
    Set objAFormFields = Nothing
    Set objAFormApp = Nothing
    Set objAcroPDDoc = Nothing
    Set objAcroAVDoc = Nothing
    Set objAcroApp = Nothing
        
    If bEnd = True Then
        MsgBox "処理は正常に終了しました。", _
            vbOKOnly + vbInformation, "正常終了"
    End If
    Exit Sub
    
Err_AFormApp_Test_01:

    MsgBox Err.Number & vbCrLf & Err.Description, _
            vbOKOnly + vbCritical, "実行時のエラー"
    bEnd = False
    GoTo Skip_AFormApp_Test_01:
    
End Sub

 

※ソースコードHTML変換:SourceConverter

 


 

実行結果

 

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

 

サンプル一覧

コメントを残す

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

CAPTCHA


出来るだけ早く返答する様には心がけています。
が、遅くなる時もありますのでご了承ください。


SAMURAI Plugin