説明
Acrobat 指定PDFドキュメントでソースPDFドキュメントからの指定されたページを使用することでページの置き換えを行う。
※Adobe Readerは当DDEを使用出来ません。
形式
[DocReplacePages(char* fullPath, long startDestPage,
char* sourcePath, long startSourcePage,
long endSourcePage)]
引数
fullPath [char*] |
更新されるPDFファイルのフルパス。既にAcrobatアプリケーションで開かれてないといけない。 注意:パス中に空白があるときは注意する。 |
startDestPage [long] |
第1引数で指定したPDFファイルの置き換えの開始頁。 |
sourcePath [char*] |
ソースPDFファイル元のフルパス名。このファイルはオープンされている必要は無い。 |
startSourcePage [long] |
ソースPDFファイル元の置き換え開始頁番号。 |
endSourcePage [long] |
ソースPDFファイル元の置き換え終了頁番号。 |
戻り値
true | 置き換えは成功しました。 |
false | fullPathによって指定されたPDFドキュメントが開かれてない。 又は置き換えに失敗しました。 |
注)ExcelのVBAではDDE命令の発信ステートメント上で、戻り値を取得出来ません。
サンプル:Excel のVBA
“E:¥Test03.pdf” の1頁から3頁を “E:¥Test01.pdf” の2頁目に置き換える。
- Excel VBA開発環境を F8 キーでステップ実行して動作確認する。
下記サンプルは正常に動作しない。
Sub DDE_DocReplacePages()
Dim lChanNo As Long ‘DDEチャンネル番号
‘パスに空白が入った時用にダブル引用符を付加
Const CON_PDF_PATH = “””E¥Test01.pdf”””
‘Acrobatアプリケーション起動
‘Shell “C:¥Program Files¥Adobe¥Acrobat 9.0¥Acrobat¥Acrobat.exe”
Shell “C:¥Program Files¥Adobe¥Acrobat 8.0¥Acrobat¥Acrobat.exe”
‘DDEチャンネルのオープン
lChanNo = DDEInitiate(“Acroview”, “Control”)
‘該当PDFファイルのオープン
DDEExecute lChanNo, “[DocOpen(“ & CON_PDF_PATH & “)]”
‘E:¥Test02.pdfの1頁から3頁をE:¥Test01.pdfの2頁目から置き換える。
DDEExecute lChanNo, “[DocReplacePages(“ & _
CON_PDF_PATH & “,2,C:¥PDF¥Test02.pdf,1,3)]”
‘PDFファイルの別名で保存 注)最適化される
DDEExecute lChanNo, “[DocSaveAs(“ & _
CON_PDF_PATH & “,C:¥PDF¥test03.pdf)]”
‘Acrobatアプリケーション終了
DDEExecute lChanNo, “[AppExit()]” ‘これをしないとAcrobatプロセスが残る
‘DDEチャネルを閉る
DDETerminate lChanNo
End Sub
実行結果
Acrobatのページサムネイル画面で比較した結果。
3,4,5ページの内容が入れ替わっています。
▽実行前 |
▽実行後 |
![]() |
![]() |
補足
- Adobe Readerでは使用出来ません。
- 上記サンプルは正常に動作しない。
- サンプルの動作不良を調査中。
動作確認環境
- WindowsXP + SP3 + WindowsUpdate
- Adobe Acrobat Pro 8.1.4 + Office Pro 2003
- Adobe Acrobat Pro 9.1.0 + Office Pro 2003
Adobe社の解説ページ : 英語
以下がAdobe社のAcrobat DDEの解説ページです。
表示には時間がかかります。
http://livedocs.adobe.com/acrobat_sdk/9/Acrobat9_HTMLHelp/IAC_API_DDE_Messages.104.18.html
< TOPへ >
はじめまして。
職場で15000枚のファイルをPDF化しないといけなくて、このサイトを見させて頂いてます。
そのPDFではリンクを貼らないといけないのですが、一つずつ貼ると大変なので、ページの置換をしようと思っています。
それで以下のコードを組んだのですが、Acrobat11×Office2010では動作するものの、Acrobat9×Office2003では置換を行いません。
(ファイルオープンやセーブはできます。)
突然で申し訳ないですが、
「これを確認した方がよい」「あれを確認した方がよい」等ありましたら、教示して頂けないでしょうか?
あまりにマニア機能のようで、どこのサイトにも記載がありません。
よろしくお願い致します。
Cells(1,1):asdf.pdf
Cells(1,2):asdf.pdf
Cells(1,3):DVDレポート.pdf
Cells(1,4):D:\2013-07-13_D\Users\Aya\Documents\産業カウンセラの宿題new\2\5A\asdf\DVDレポート.pdf
Const CONST_ACRO As String = “C:\Program Files (x86)\Adobe\Acrobat 11.0\Acrobat\Acrobat.exe”
Const CONST_ACROVIEW As String = “AcroViewA11″
‘職場ではAcrobat9のため、”AcroView”
Private Sub CommandButton4_Click()
Dim IchanNo As Long
Dim i As Integer
Dim j As Integer
Dim k As Integer
k = 1
j = 1
Do While j < i
'家で試したときはi=1、職場で試したときはi=150くらい
Shell CONST_ACRO
IchanNo = DDEInitiate(CONST_ACROVIEW, "Control")
DDEExecute IchanNo, "[DocOpen(" & foldername_b & "\" & Cells(k, 1) & ")]"
DDEExecute IchanNo, "[DocReplacePages(" & """" & foldername_b & "\" & Cells(k, 1) & """" & ",0," & """" & Cells(j, 4) & """" & ")]"
DDEExecute IchanNo, "[DocSaveAs(" & foldername_b & "\" & Cells(k, 1) & "," & Cells(j, 4) & ")]"
DDEExecute IchanNo, "[AppExit()]"
DDETerminate IchanNo
j = j + 1
Loop
End Sub
ぶんぶん さん。はじめまして。
>・・職場で15000枚のファイルをPDF化・・
15000ファイルをPDF化する事ですね。
元のファイルの形式は何でしょうか?
>・・PDFではリンクを貼らないと・・
リンクを貼る?
イマイチ、何をしたいのかが分かりません。
>・・、Acrobat11×Office2010では動作・・Acrobat9×Office2003・・
AcroabtアプリのバージョンとOfficeのバージョンにより、動作が変わります。
動作可能とするバージョンに的をしぼって考える事をお勧めします。
Acrobat 9は不安定で動作しないケースもタマにあります。
Acrobat 10以降の使用をお勧めします。
どちらにしても各バージョンは最終アップデートした状態にしてください。
それとAcrobatをプログラミング操作する場合はDDEでは無く、OLE操作をお勧めします。理由はDDEではエラーステータスが取得出来ないからです。OLEならばエラー判定が出来ます。
Office VBAのプログラミングからAcrobat経由でPDF操作をするのでしたら、以下のサイトをご参考にする事をお勧めします。
http://pdf-file.nnn2.com/
※上記サイトもサイト管理人は同じです。
Office VBAでPDF更新を行う時は、AcroabatはStandardでは動作しません。Professionalバージョンをお使いください。(正確にはStandardでは動作未確認)
回答ありがとうございます。
時系列で話しますが、おそらくリンク作業についてはご理解頂けないと思います。
単に「ページの置換をしたい」と認識して頂きたいです。
そして、ページの置換作業はoleではできないと認識しています。
>pdf化の経緯
・七年前の契約で、今回と同じように15000枚の資料(原稿はパワーポイント、ワード、ビジオ)をPDF化し、1000個のファイルにまとめて納入しました。
資料の中身は配線図も入っており、どうしても配線と配線のつながりを図面で現せないところに、Acrobatのリンク機能を使って、該当箇所をクリックしたら、画面表示を配線のつながり先にジャンプするようにしました。
Acrobatのリンク機能については、アドビのホームページで確認して下さい。
リンク機能を持つpdfのページは5000枚で、一枚につき最大24箇所あります。
・今回の契約でも同じことをする必要があります。
既に配線図のpdf化は完了しました。5000枚はまだ結合しておらず、5000枚=5000ファイルの状態です。
配線図も前契約から変わるのですが、配線と配線のつながりをうまく表現できない箇所は前契約と同じ箇所です。5000枚も手動でリンク作成作業をするのは大変なので(リンク先の画面表示の大きさ設定を作業者間で揃えるのが大変)、Acrobatの「ページの置換」を使って、前契約のファイルを開いて、「ページの置換」で今契約のファイルをいれることにしました。
なぜこんなことをするのかと言うと、Acrobatの「ページの置換」ではリンク情報は置き換わらないためです。詳細はアドビのホームページを見て下さい、
リンク情報は前契約のものを使い、今契約の内容のファイルが作成できます。
それでも5000枚あります。自動的にできるようにしたかったのです。
何度もすみません。
Acrobat pro 11で、Acrobat standard9です。
それが原因な感じですね(^^;
DDEのコマンド をスタンダードでも受け付けないわけではないのに、不思議な感じです
ぶんぶん さんへ。
御訪ねしたい事は沢山ありますが
①・・アドビのホームページで確認・・
箇所のURLを教えて下さい
②置換して挿入されるPDFにはリンク情報(箇所)が既に入ってると考えてよろしいでしょうか。
③リンク箇所はテキスト・リンクでしょうか?
ページリンク(ページ内のどの箇所でもクリック)でも可能でしょうか。
返答コメント内容から判断すると、
・PDF化した5000枚のPDFファイルに別ファイル(配線図)へのリンクを貼り付ける。
・リンクはテキスト・リンク?
・リンクを含んだPDFが既に用意されて、それを置換で置き換える?
・OLEではリンクが消えてしますので、DDEで行う。※動作未確認
今日の午前は出かけます。午後にでもまた見ます。
お時間を取らない程度の返答で結構ですので、お願いします。
PDFファイルにAcrobat JavaScript(JavaScriptのAcrobat版)を埋め込んで、該当ページをクリックしたら該当リンク先を表示するって事が出来れば、なんて勝手に考えています。
単にページ置換で済むのでしたら、Acrobat Pro バージョンを使用すれば動作すると予測しています。
リンクの種類は↓です。
http://help.adobe.com/ja_JP/acrobat/standard/using/WS58a04a822e3e50102bd615109794195ff-7cb7.w.html
これがテキストリンクかどうかよくわかりません。。。
置換前のページにはリンクが貼ってあります。挿入されるページにはリンクが貼ってありません。
リンクは頁内で、ファイルの外には飛びません。
絵でかくと簡単なんですが、説明が難しいですね(^^;
http://help.adobe.com/ja_JP/acrobat/standard/using/WS58a04a822e3e50102bd615109794195ff-7ec9.w.html
リンクの維持はこの機能↑です。
ぶんぶん さんへ。
以下はダメでしたか?
http://pdf-file.nnn2.com/?p=223
AcroExch.PDDoc:InsertPages メソッド (2版)
使用上の注意は有りますが、プログラミングで逃げれます。
http://help.adobe.com/ja_JP/acrobat/standard/using/images/ca04.png
↑やりたいことはこれです。左側が置換前、右側が置換後。
コンテンツが変わっても、リンク情報は残っています。
ページの挿入では、挿入前のページのリンク情報を挿入後のリンク情報に移せません。。。