▼ サイトの紹介
このサイトはExcel VBAから、Acrobat アプリケーションをプログラミング操作するOLE機能について解説しています。
Adobe社はこのOLE機能の事を「IAC」と表現しています。
(注意:Adobe Readerだけでは使用出来ません)
Adobe社提供のSDK資料を元にサンプルを加えて説明をしています。
サイト管理人もご覧下さい。
▼ 当サイトの使い方
当サイトをうまく使う上での手順を以下に示します。
- 最初に「Acrobat SDK:OLE objects and methods図を入手する」にあるオブジェクト連携図を手に入れます。出来れば印刷する方が見やすいです。1頁です。
- 下記の「Excel」、「Acrobat」、「ダウンロード」、「SDK」、「備考」にサッと目を通します。「その他&メモ」は特に見なくてもイイです。
- 自分が目的とする処理を探しながら、印刷したオブジェクト連携図を元にサイト右記「Object & List」下を上からクリックしてザックリと内容を見ます。各オブジェクトのメソッドの詳細は後にして全体で何が出来て、何が出来ない(サポートされていない)かを把握します。
「Acobat OLE 以外の選択」も見て下さい。 - 目的が解決出来ない時は、キッパリとあきらめてAdobe社の日本語「Acrobatフォーラム」で相談します。当サイトより質が高い。
- それでもダメなら、当サイトにコメントを入れてみます。サイト管理人がある程度、判る範囲でお答えをします。
(お願い:管理人を「様」での呼び方はご遠慮下さい。管理人さん、で十分です。)
▼ Excel
- Excel からAcrobatを操作する訳
- Excel から PDFファイル を作成&操作出来る
- Excel のオブジェクトブラウザ
- Excel からAcrobatを起動する
- Excel からPDFファイルを起動表示する
- Excel サンプル:PDFの文書プロパティを表示する
- 上記7のサンプルファイルの実行エラー
- Excel VBA 実行エラー時のメッセージ
- Excel でOLEの参照設定をする
- Excel でOLEの参照設定をする (AFormAut の追加)
- Excel でOLEの参照設定をする (Stream の追加)
- Excel でOLEの参照設定をする (MSXMLの追加)
▼ Acrobat
- Acrobat SDK:OLE objects and methods図を入手する
ここで示す図は必ず入手する必要があります。
これが無いとオブジェクト連携が判らなく、OLE(IAC)操作が出来ません。 - Acrobatアプリケーションを閉じる(実は簡単に出来ない)
- Acrobat OLEのエラーを防ぐVBAロジック
- Acrobat OLE 使用上の注意事項
- Acrobatプログラミングにおける技術上の制約やライセンス上の制約
- PDFファイルを作成、及び操作する開発者に対しての注意事項
- Windows のコマンドラインから Acrobat や Adobe Reader を使用して印刷する方法
- PDFドキュメントの文書フラグとは
- PDF バージョンとは
- PDFバージョンの変化
- ExportTask.xml
- 一括で複数ファイルを処理(アクション、バッチ処理)
- PDF の3つのパスワード
- PDFのパスワードは32文字まで
- 印刷の問題点を解決
- PDF内での座標の起点
- Acrobatとレジストリ
- PDF上のテキストとその座標
▼ ダウンロード
- 各種サンプルのダウンロード
- Adobe Acrobat 9.1 SDK のダウンロード
SDKをダウンロードしてサンプル、解説PDF,HTML等を入手する必要があります。
Adobe Acrobat X SDK のダウンロード情報も入ってます。 - Adobe Acrobat 8.1 SDK のダウンロード
この 8.1 バージョンのSDKは現時点(2013/10/03)で一般公開されてません。
情報が入り次第、掲載します。 - Acrobat製品別ダウンロード先 URL
- AcroPDFLib.AxAcroPDF:Excel VBAサンプル(A)
- AcroPDFLib.AxAcroPDF:Excel VBAサンプル(B)
- Adobe Readerの各種バージョンのダウンロード
▼ SDK
- AcrobatプログラミングにおけるMenu and Toolbar Button Names 一覧
- PDDocのGetJsObjectのオブジェクト構造図が見当たらない
- Acrobat SDK:正誤表
Acrobat SDK v8.1ドキュメントに記載ミスが有ります。 - Acrobatに関するSDKが Acrobat Developer Center からダウンロード出来ます。
- Acrobat JavaScript における「Safe Path:セーフパス」についての注意事項
- Acrobat SDK公開Webサイト URLの取得方法
▼ 備考
- JavaScriptの解説はAcrobat v7 v8 共に英語版です。しかし、旧バージョンですがコメントを頂いた方から日本語版のAcrobat JavaScript解説PDFが見つかりました。以下がそのPDFです。
http://www.adobe.com/jp/support/products/pdfs/acrojs_j.pdf - [2009/1/7] AcroExch.AVDoc:Open メソッド でバグ?を発見しました。Acrobat v8.1.3 v9.0が対象です。
▼ その他&メモ
- OCR機能:読んde!ココと比較した結果
- アドビ(Adobe)製品に関するRSSの情報
- 添付ファイルの扱いには注意が必要
- AcrobatはPDF作成ソフトの標準では無くなる?
- Acrobat PDF は国際標準化された
- 「手書きPDF入門」 リンク
- planet pdf (PDF関連の英語サイト) リンク
- デフォルトプリンタを一時的に変更する方法
- Delphi(デルファイ,デルフィ)言語からの使用方法
- Acrobat使用時のレジストリ変化を取得する方法
- オブジェクトは値では無く、参照情報を持つ
- Adobe Reader で PDF ファイルを表示 / 印刷する方法
- サンプル:RGB値の一覧(カラー番号)
- 「・・このバージョンの Acrobat ではサポートされていない新しい形式・・」警告メッセージへの対応
▼日本語の資料
日本語版で公開されている技術情報が非常に少なく、また対応バージョンも古く、作成年度も古いのが多いです。しかし、PDF 又はAcrobat のエンジニア向けの基本的な技術はこの10年間はそれ程進歩していません。よって思った以上に使える事に気がつくはずです。
公開されている情報は今後消滅すると予想されます。必要な情報はバックアップする事をお勧めします。
▼ Acrobat SDK 関連
Acrobat JavaScript Object Specification バージョン 5.0.5テクニカルノート# 5186 改訂日:2001年9月14日
(297頁) Acrobat 5.0 JavaScript リファレンスマニュアル。
PDF ドキュメントでJavaScript を使用するために必要なすべての情報。
※2018/10 リンク先は消滅しました。- Developing Acrobat Applications Using JavaScript
Adobe Acrobat SDK バージョン 8.0
(220頁) JavaScript を使用してAdobe Acrobat での開発や拡張したりする方法について
説明したマニュアル。必読! - JavaScript for Acrobat 3D Annotations API Reference
Adobe Acrobat SDK 2007年4月バージョン 8.1
(105頁) 3D 機能(3D注釈のJavaScript API)をユーザに提供したい開発者を対象にしたマニュアル - Parameters for Opening PDF Files(日本語版)
Adobe Acrobat SDK Version 8.1 April 2007
(8頁) PDF ファイルをURL やコマンドの中で開く際に使用できるパラメータについて説明したマニュアル - Adobe Acrobat Workshop
(78頁) Acrobat 7.0 JavaScript、API、IAC等の開発環境に関する概念の説明図 - Adobe Acrobat 7.0 Acrobat JavaScript Scripting Guide 2005年1月7日
(276頁) Acrobat JavaScript を使用して開発したり拡張したりする方法について簡単に説明ししたもの - Programming Acrobat JavaScript Using Visual Basic
Technical Note #5417 バージョン:Acrobat 6.0 2003年5月
(14頁) Acrobat 6.0 提供のJSObject と言うOLE オートメーション機能のプログラミング環境に関しての概念を説明したもの - Acrobat JavaScript Scripting Guide
Technical Note #5430 バージョン:Acrobat 6.0 2003年5月
(90頁) Acrobat 6 Pro に搭載されている JavaScript 開発環境を使用して Acrobat アプリケーションを開発したり拡張したりする方法を簡単にまとめたもの - Upgrading Plug-ins From Acrobat 5 to Acrobat 6
Technical Note #5424 バージョン:Acrobat 6.0 2003年7月
(28頁) Acrobat 6 API の概要を説明し、Acrobat 5 およびそれ以前のプラグインを Acrobat 6 にアップグレードする際に開発者が理解しておくべきことについて説明したマニュアル - Adobe® Solutions Network Developer Program FAQ for Members
Version 3.0 MAY 2002
(461頁) ASNディベロッパーサポートプログラム会員から頂いたAcrobat Plug-in API,IAC,Readerに関する質問を整理した情報 - Acrobat Developer FAQ
Adobe Developer Relations 改定:1999年9月2日
(37頁) 質問および回答形式を整理した情報 - Parameters for Opening PDF Files(日本語版)
Adobe Acrobat SDK Version 8.1 April 2007
(24頁) Acrobat SDK でよくある質問と回答を整理したもの - Adobe Acrobat 7.0 Acrobat SDK ユーザガイド 2004年12月14日
(124頁) Acrobat SDKで提供されている機能、Acrobatで提供されている機能とその操作説明等 - JavaScript for Acrobat API Reference
Adobe Acrobat SDK バージョン 8.0
(765頁) Acrobat JavaScript の詳細な解説書/リファレンス
▼ Acrobat 一般資料
- Adobe Acrobat Security ディベロッパーサポート 2005年4月7日
(43頁) Acrobat 7.0 の各種セキュリティに関する概念
管理人の独り言
- 2010/4/26 「Appメソッド一覧」移行完了。かなり見直したので、結構解説が難しくなってしまったかも・・。全部の移行が完了したら、再度見直す事にして、次に行きます。
- 2010/5/14 データの移行と再リンクが終わりました(汗)。サイトマップの構成も少し見直して・・。後は見直し(リニューアル)する必要有り。OLE(IAC)の全貌が判った時点で細かい部分の追加が必要となった。各頁にかなりの追加と再テストが必要だが既に環境は出来あがっている。本当の踏ん張ると事はココからかもしれない。
- 2010/5/18 Appオブジェクトの移行が完了しました。
- 2012/11/12 AFormAut オブジェクトが IAC に含まれていない盲点に orz
- 2013/10/14 JavaScriptAPIと言う当サイト独自の表現を JSObject と本来の表現に変更する。
- 2015/5/9 サイトのレイアウトを変更。
▼ Acobat OLE 以外の選択
Adobe Acrobat OLE(IAC)以外で、PDFファイルをプログラミング操作する情報を以下に提供します。
VBA の Shell 関数(又はWscriptのExec関数)で起動する事により、IACには無い機能で複数ファイルの自動化処理が可能だと思われます。
- Qpdf
PDF をコマンドラインで操作するツール
セキュリティ(パスワード)の設定が出来る! - Poppler
PDF をコマンドラインで操作するツール
Xpdf をペースした機能拡張版
注意:公式サイトからはWin版EXEは配布されてません。 - pdf2htmlEX
PDF をHTMLへ変換する高性能なツール - Coherent PDF Command Line Tools
非常に多機能なコマンドラインツール
ライセンスに注意が必要 - Xpdf
PDF をコマンドラインで操作するツール
Popplerの旧バージョン。安定版。 - PDFtk * ※検証予定(時期未定)
PDF をコマンドラインで操作するツール - PDFill PDF Writer: PDF作成ツール
コマンドラインの使用は有償版のみ。
無償版と有償版。表示は英語。 - ★その他の各種ソフトとツール★
各種のPDFソフトウェアを一覧でまとめたサイトです。
たぶん、ココの情報が最新で内容も充実してると思われます。
[コメント入力] <-をクリックするとページの最後にコメント入力が出来ます。
名前(ニックネーム)は必須。メールアドレス(非表示)も必須ですが、適当で結構です。
【更新日:2019/06/05 (11版)】
管理人様
すみません。途中でコメントアップしちゃいました。(汗)
分かりにくくなっているので再度記載します。
こちらの環境は
Windows XP Pro + SP2 + MicrosofUpdate +
Microsoft Excel 2003 (+ SP2) +
Adobe Acrobat 9 Pro (v9.1.3)
です。
ここに記載するプログラムコードは、管理人様のサイトにある状態を
そのまま記載しておきました。やはり区切り文字が入って追記状態と
なりました。
Private Const PDSaveFull = &H1
Sub test()
Dim objAcroPDDoc As New Acrobat.AcroPDDoc
dim lRet
lRet = objAcroPDDoc.Open(“ファイルパス”)
bln1 = objAcroPDDoc.SetInfo(“Keywords”, “”)
bln2 = objAcroPDDoc.Save(PDSaveFull, "ファイルパス")
lRet = objAcroPDDoc.Close
Set objAcroPDDoc = Nothing
End Sub
tomoさんのスクリプトで以下の環境でテストしてみました。
最初に文字列値(半角英字)をKeywordsに入れて実行。後で空値で実行しました。
1)Windows XP Pro + SP3 + MicrosofUpdate +
Microsoft Excel 2003 (+ SP3) +
Adobe Acrobat 8 Pro (v8.1.7)
■結果:区切り文字は入らない。最後は空になる。
2)Windows XP Pro + SP3 + MicrosofUpdate +
Microsoft Excel 2003 (+ SP3) +
Adobe Acrobat 9 Pro Extenf(v9.2.0)
■結果:区切り文字は入らない。最後は空になる。
上記の2はOffice 2003とAcrobatしか入ってないクリーンな環境です。
tomoさんの環境では何か古い設定が無意識に入ってしまって、区切り文字「;」が入るのではないかと予想します。Acrobatはバージョンアップする度に過去の機能は残して機能追加する形を取っていると聞いています。管理人もOLE(IAC)の機能を100%熟知している訳ではありません。特に古い設定(機能)に関してはSDKにすら例はあっても説明は削除されている状態です。※困っています。
そこで別の環境、つまり別のパソコンでもう一度テストして頂けないでしょうか。
なお、Tomoさんのスクリプトとこちらのスクリプトの違いは
bln2 = objAcroPDDoc.Save(PDSaveFull, “ファイルパス”) <-Tomoさん lRet = objAcroPDDoc.Save(PDSaveIncremental, “ファイルパス”) 第一引数です。こちらは変更部分のみ保存する形を取っています。 しかし、今回の管理人のテストはTomoさんの引数を使ってテストしました。 Tomoさんも管理人の引数「PDSaveIncremental」を使ってテストするとどうなるか、お願いします。 それにしても、このKeywordsに関する記述はSDKには見当たりませんでした。見落としているか?
追記。
「PDSaveFull」で行っていましたが、常に『上書き』状態になり、区切り文字「;」は入りません。全角文字でやったテスト結果です。
管理人様
返答ありがとうございます。
>Acrobatはバージョンアップする度に過去の機能は残して機能追加する形を取っていると聞いています。
そうなのですね。調査してみます。
管理人様、はじめまして。
VBAで、PDFに対してあれこれと処理をしていくプログラムを組んでいるのですが、このサイトがとてもとても勉強になり、非常に感謝しています。
今回このようにコメントさせていただいたのはお聞きしたい事があるからなのですが、もし宜しければヒントなどいただければ嬉しく思います。
PDF内にフォームのボタンツールで作成したボタンが設置されてあります。
そのボタンのアクションには[マウスボタンを放す]-[ファイルを開く]-[PDFファイルのパス]が設定されてあり、クリックする事でそのPDFファイルが開くようになっています。
このPDFファイルのパスを取得したいのです。
ボタンオブジェクト(?)を取得してPerfomeでアクションの内容を実行したり、RemoveAnnotでボタンを削除したりはできるのですが、パスの取得だけができずに困っています。
OSはVista、Acrobatのバージョンは8 Professional、開発環境はExcel 2007です。
お忙しい中申し訳ありませんが、何かご教授いただけないでしょうか?
よろしくお願いします。
Ketaromさん。初めまして。
質問内容は理解出来ました。
実際に(PDFリンク)ボタンを着けたPDFも作ってみました。
現在は検討中です。以下は「つぶやき」です。(汗
(1)---------------------------------------------------
<技術メモ:PDF仕様書の属性>
PDFファイルをテキストファイルとしてVBAで読み込み、PDF仕様書に従った箇所(属性)からファイルパスを取得する。
1)「E:\sample2.pdf」を開く時のPDFファイル内容。
664 0 obj
<</F 665 0 R/S/Launch/NewWindow true>>
endobj
665 0 obj
<</UF(sample2.pdf)/F(sample2.pdf)/Type/Filespec>>
2)「F:\Adobe PDF\Acrobat PDF IAC Reference On-line(5165.vwiacref).PDF」を開く時のPDFファイル内容。
664 0 obj
<</F 920 0 R/S/Launch/NewWindow true>>
endobj
920 0 obj
<</UF(Adobe PDF/Acrobat PDF IAC Reference On-line\(5165.vwiacref\).PDF)/F(Adobe PDF/Acrobat PDF IAC Reference On-line\(5165.vwiacref\).PDF)/Type/Filespec>>
3)「D:\読んde!!ココ\転送結果\OLD1\[マニュアル] CCC PoerUp Kit (VB.OCX).pdf」を開く時のPDFファイル内容。
664 0 obj
<</F 922 0 R/S/Launch/NewWindow true>>
endobj
922 0 obj
<</UF( / D /姦0・d e ! !0ウ0ウ /寂・}Pg・/ O L D 1 / [0゙0ヒ0・「0・] C C C P o e r U p K i t \( V B . O C X \) . p d f)/F(/D/読んde!!ココ/転送結果/OLD1/[マニュアル] CCC PoerUp Kit \(VB.OCX\).pdf)/Type/Filespec>>
endobj
<VBA処理方法>
1)VBAで該当するPDFファイルを最適化で別名保存する。これでゴミデータ部分を削除する。理由:PDFを更新すると前に削除したボタン類の情報は使用不可フラグが立つだけで、実際はPDFファイル内から削除されていない為。最適化で実際にデータとして削除される。
2)VBAからその最適化されたPDFファイルをテキストファイルとして読み込む。
3)PDF仕様書に従って、リンクファイルのパスを取得する。
<VBA処理方法のメモ(問題点)>
1)VBAでPDFファイルをテキストとして読み込むとバイナリ箇所でEOFに相当する部分のコードがあると、PDFファイルをテキストとして最後まで読み込めない。ならば、テキストモードで無く、バイナリーモードで読み込めば出来るか? (それでも、駄目だった!?)
※↑ 以前にこの一歩手前までVBAロジックを作ったが、どうしてもテキスト中に有るバイナリ部分内部でEOFを検出して次の行をVBAが読み込んでくれなかった。(スキル不足か?)
(2)---------------------------------------------------
該当するPDFファイルを別名保存する。その時にファイル属性をPDF以外にして作ったボタンの中のファイルパスが取得できないか?
・HTML ×
・テキスト ×
・XML ×
・TIF ×
・EPS ×
(3)---------------------------------------------------
VBAからOLEで注釈内容を取得する時にボタンのリンク属性も取得できないか?・・;。 イヤ、駄目だ。PDAnnotオブジェクトは不安定でうまく取得出来る保障が無い。
(4)---------------------------------------------------
Acrobat JavaScriptは?
更に複雑になる・・。
・・・・、(汗)、今日の「つぶやき」はココまで。
申し訳ない。何か逃げ手がないか、再検討も含め別途考えて見ます。
ご多忙中の所、早速のお返事、大変恐縮いたします。
こんなに色んなパターンで検証していただきありがとうございます!
テキストファイルとして読み込むという方法は思いつきませんでした……が、それでもやはり難しい事なんですね……。
ボタンを右クリックしてコピーするなど、手動であれこれしてみてもファイルパスを取得する事ができないので、これは取得できないようになっているものなのでしょうか……?
VBAで難しいとなると、JavaScriptやその他の方法を検討してみるしかないかなと考えています。
もちろん引き続きVBAでも検証していきたいとも考えていますが。
こんなにご丁寧な解説までしていただき、本当にありがとうございました。
まだまだこちらのサイトで勉強させていただきたい事がたくさんあるので、サイト移行作業頑張ってください!
>Ketarom 様はじめまして
>管理人様お久しぶりです
横から失礼いたしますが
>VBAで難しいとなると、JavaScriptやその他の方法を検討してみるしかないかなと考えています。
>もちろん引き続きVBAでも検証していきたいとも考えていますが。
今回の件を解決できるかどうかわかりませんが、
PDFの中身を本格的に解析する必要があるのであれば。
Acrobat Core Api も検討対象に入れるというのも手かもしれません
以下独り言・・・
Core Apiの
ASBool CosDictKnown (CosObj dict,ASAtom key);
とかを使えば、PDFのディクショナリに比較的忠実にアクセスできたような・・?
VB6のころの記憶ですが、バイナリファイルの読み込みは
Dim fileNo As Integer
Dim fileSize As Long
Dim bytData() As Byte
fileSize = FileLen("C:\aaaa.pdf")
ReDim bytData(fileSize - 1)
fileNo = FreeFile
Open "C:\aaaa.pdf" For Binary Access Read As fileNo
Get #fileNo, , bytData
Close #fileNo
とかで、ファイルサイズを指定して読み出せば、よかったが気がします・・・
mrkexeさん。
『助け舟』の助言を有難うございます。
VB6でのサイズ指定の件ですが、・・・・。
mrkexeさんのやり方ではやらなく、小分けして読み込んでいました。
(だから、VBAで読み込めなかったのか?)
mrkexeさんのやり方なら出来る様な気がします。
しかし、テストとPDF仕様書の再チェックをしないと。
>Core Apiの
>ASBool CosDictKnown (CosObj dict,ASAtom key);
>とかを使えば、PDFのディクショナリに比較的忠実にアクセスできたような・・?
そう、それです。
Core Apiも使ってみたい!
でも、その前にココのサイトを移行(+見直し)しないといけない。
その次にAcrobat JavaScriptを制覇しないといけない。
それから、Core Apiを・・・・、した、い!
影分身の術で自分を4人くらいに分けて、それぞれで作業分担をさせたいです。
(何をバカな事を言っているのだろ~か。悲)
今日は非常x10倍に多忙だったので、続きは明日のココロで。(疲
お世話になっております。
mrkexe様はじめまして。助言ありがとうございます!!
>Acrobat Core Api も検討対象に入れるというのも手かもしれません
何やら難しそうな技術が……!
興味がありますので、Core Apiも少し勉強してみようと思います!
現在VBAで、ボタンのアクションを実行させてリンク先のPDFを開き、そのPDFファイル名を取得できないかなと検証しています。
ファイルを開く事はできるのですが、なぜか開いた後のPDFファイル名が取得できなくてモヤモヤしているのですが、あと一歩という印象を受けています。
管理人様
はじめまして。この度、Excel VBAにてパスワード付きPDFのページ指定印刷にトライ、何とかこちらのサイトに辿りつくことができました。
さまざまな検証、情報に感激するばかりです!! ありがとうございます。
移行前のサイトでAxAcroPDF004.zipを拝見し、
AcroRD32.exeを起動するよりも遥かに負荷少なく
ぜひ活用させていただきたいと思っております。
<パスワード解除+ページ指定印刷>の自動化にあたり、
AcroRD32.exeをShellで起動、Sendkeyで操作しますも動作が不安定で、
WScript.Shell使用時にはCPUが100%になってしまいました。
(AxAcroPDF004.zip内)AcroPDF1.src=File名 実行後に表示されますパスワード入力画面に
Sendkey等でパスワードをキー送信できないかと試みましたがうまくいきませんでした。
ご指導のほど何とぞ宜しくお願いいたします。
ひかるさん。
スイマセン。コメントのチェック漏れでした。今、拝見しました。
「<パスワード解除+ページ指定印刷>の自動化」の件ですが。
PDFTKと言う有名なフリーソフトがあります。本来はコマンドライン操作ですが、GUI用の別のプラグイン的なツールも別にあります。このPDFTKはパスワードを指定して、更にページ指定編集が出来るとネット上での情報があります。その証拠にGUI版にもその様な項目があります。
例:「pdftkでパスワード付きPDFを処理したい」
http://www-utheal.phys.s.u-tokyo.ac.jp/~yuasa/wiki/index.php/pdftk%E3%81%A7%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E4%BB%98%E3%81%8DPDF%E3%82%92%E5%87%A6%E7%90%86%E3%81%97%E3%81%9F%E3%81%84
(pdfファイルの指定ページを切り出す例)
pdftk dcument.pdf input_pw PASSWORD cat 5-10 output document_page_5_10.pdf
上記で一旦別ファイルに切りだして、後はOLE、又はDDEで印刷するだけで出来ると思います。
PDFTKの公式サイトは
http://www.accesspdf.com/pdftk/
です。英語サイトですが、サンプルも有りますから、機械翻訳すればある程度は理解可能です。
PDFTKを扱った日本語サイトも多数あるので、「PDFTK」で検索すれば、目的とする処理が見つかると思います。(レスが遅い!)
管理人様
PDFTKの情報、誠にありがとうございます!!
私のコメントの書き方が悪かったのではと諦めていたところでございました。
私も今拝見させていただきました。
こちらこそ御礼が大変遅くなり失礼をいたしました。
早速調べ、トライしてみます!!とりいそぎ御礼まで。
ありがとうございます!!
管理人さん,はじめまして.ハンドル名Mr.XRAYと申します.
Delphi(デルファイ,デルフィ)という言語でアプリの開発を行っています.
Adobe Acrobatの操作関係のコードを書きたいと思い,検索してここに来ました.
こちらのサイトの記事にもありますが,本当にネット上にはほとんどサンプルがありません.各オブジェクトの解説記事とサンプルは大変助かります.
苦労して作成した記事とコードをそのまま利用させていただくのは申し訳ないのですが,利用させて頂きました.
http://mrxray.on.coocan.jp/Delphi/plSamples/724_Acrobat_TAcroApp.htm
もし問題があれば指摘してください.
今後も大いに期待しています.
まずはお礼と報告と思い,コメントさせていただきました.
Mr.XRAYさん。初めまして。
イヤ~、脱帽ですヨ。(マジ
DelpiはV1.0で少しカジッただけです。
しかし、雰囲気は判ります。
解説記事もなかなかですが、コーディングが綺麗です。
作法に従った感じを受けました。
私のサイトはリニューアル中で本当に申し訳無いと思っている状態ですが、それでもそんなサイト状態にもかかわらず、押さえる所はしっかりと押さえて見てくれている。
こうゆうコメントは本当に励みになります。
リニューアルが完了するまでは二カ月以上は掛かると思っています。
再度いろんな面から再検討しているからです。
しかし、頑張らないと!(ネ
>まずはお礼と報告と思い・・
イヤイヤ、お礼を言いたいのはこちらです。v(^_^)
管理人さん。こんばんは。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
以上
初書き込み失礼します。
excelのVBAでPDF操作が出来ることを最近知りました。
まだまた勉強中で、試行錯誤している状態です。
解決したい問題が出てきましたので、
質問させていただきます。よろしくおねがいします。
使っている環境
XP
Adbe Reader7 7.0.0
Excel 2003
Excelマクロから下記コードで
ページ範囲を指定して、PDFの印刷をしようとしています。
Private Sub CommandButton1_Click()
AcroPDF1.loadFile "C:\download.pdf"
AcroPDF1.printpages 1,2
AcroPDF1.printpages 15,16
End sub
1.2ページを出力し、次に15、16ページも出力するようにしています。
(最後はページ数を変数にして、Do Untilでぐるぐるまわすことを考えております)
これで今困っている内容は
AcroPDF1.printpages のタイミングで
警告メッセージが出て困っています
--- メッセージの内容 ---
『警告!スクリプトでAcrobatファイルの印刷が要求されました。
文書全体が印刷される可能性があります。
印刷を実行しますか?
□以後、このメッセージを表示しない
はい いいえ』
----------------------------
☆現象1
コマンドボタン
↓
警告メッセージ
↓
□以後、メッセージを表示しない にチェック
↓
はい を押す
1・2ページは印刷されます。
15・16ページは印刷されません。
☆現象2
コマンドボタン
↓
警告メッセージ
↓
□以後、メッセージを表示しない にチェックをしない
↓
はい を押す
1・2ページは印刷されます。
↓
再び警告メッセージが出ます
(数百枚となると、毎回はいを押さなければいけない)
16・16ページが印刷されます。
希望は、メッセージボックスを表示させずに
1・2ページのあとに16・16ページも印刷したいと思っております。
VBAの掲示板でも質問させてもらって、助けていただいたのですが、
「最初に警告は出ますが、チェックボックスをオンにして表示しないようにしても、
次回以降は警告なしで 印刷できる」とのことでした。
長々と、わかりにくい文章ですみませんm(_ _)m
解決につながるお知恵を頂ければ幸いです。
初書き込み失礼します。
excelのVBAでPDF操作が出来ることを最近知りました。
まだまた勉強中で、試行錯誤している状態です。
解決したい問題が出てきましたので、
質問させていただきます。よろしくおねがいします。
使っている環境
XP
Adbe Reader7 7.0.0
Excel 2003
Excelマクロから下記コードで
ページ範囲を指定して、PDFの印刷をしようとしています。
Private Sub CommandButton1_Click()
AcroPDF1.loadFile "C:\download.pdf"
AcroPDF1.printpages 1,2
AcroPDF1.printpages 15,16
End sub
1.2ページを出力し、次に15、16ページも出力するようにしています。
(最後はページ数を変数にして、Do Untilでぐるぐるまわすことを考えております)
これで今困っている内容は
AcroPDF1.printpages のタイミングで
警告メッセージが出て困っています
--- メッセージの内容 ---
『警告!スクリプトでAcrobatファイルの印刷が要求されました。
文書全体が印刷される可能性があります。
印刷を実行しますか?
□以後、このメッセージを表示しない
はい いいえ』
----------------------------
☆現象1
コマンドボタン
↓
警告メッセージ
↓
□以後、メッセージを表示しない にチェック
↓
はい を押す
1・2ページは印刷されます。
15・16ページは印刷されません。
☆現象2
コマンドボタン
↓
警告メッセージ
↓
□以後、メッセージを表示しない にチェックをしない
↓
はい を押す
1・2ページは印刷されます。
↓
再び警告メッセージが出ます
(数百枚となると、毎回はいを押さなければいけない)
16・16ページが印刷されます。
希望は、メッセージボックスを表示させずに
1・2ページのあとに15・16ページも印刷したいと思っております。
VBAの掲示板でも質問させてもらって、助けていただいたのですが、
「最初に警告は出ますが、チェックボックスをオンにして表示しないようにしても、
次回以降は警告なしで 印刷できる」とのことでした。
長々と、わかりにくい文章ですみませんm(_ _)m
解決につながるお知恵を頂ければ幸いです。
書き込み間違えました
最終行から上に数えて8行目
×16・16ページが印刷されます。
○15・16ページが印刷されます。
すみません。
あや さん。はじめまして。
取り急ぎ、要点のみ返答させて頂きます。
Private Sub CommandButton1_Click()
AcroPDF1.loadFile “C:\download.pdf”
'「以後、メッセージを表示しない」チェックをオンで[はい]
AcroPDF1.printpages 1,2
AcroPDF1.loadFile “C:\download.pdf”
AcroPDF1.printpages 15,16
End sub
(テスト環境の復旧に時間が掛かるので)
上記の結果で15.16頁が警告メッセージ無しで印刷されるかを教えてください。
追加:
以下も参考にしてください。
AxAcroPDFLib.AxAcroPDF:Excel VBAサンプル(B)
http://pdf-file.nnn2.com/?p=695
上記のExcelファイル・サンプルはExcel2003+Reader7.1.4で動作はします。
印刷は環境がすぐに出来ないので未確認ですが。
管理人さんさっそくの書き込みありがとうございます。
たすかります。
教えていただいた上記6行のマクロでの動きは
1・2ページが印刷されず
15・16ページが印刷されました。
その後、コマンドボタンをもう一度押したところ
どちらのページも印刷されませんでした。
ひとまず報告のみになることをお許し下さいm(_ _)m
参考リンクありがとうございます。
時間がかかると思いますが、目を通しています。
あや さんへ。
そうですか、そうなりましたか。
何となく、雰囲気が分かってきました。
printPagesメソッドは「印刷が完成しなくても、このメソッドの次のコードを直ちに実行します」特徴を持っています。
つまり最初の命令は早すぎて無視された可能性があります。
ならば、次はどうでしょうか?(勘
#If VBA7 Then
Private PtrSafe Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)
#Else
Private Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)
#End If
Private Sub CommandButton1_Click()
AcroPDF1.src = "C:\download.pdf"
'AcroPDF1.LoadFile AcroPDF1.src
'「以後、メッセージを表示しない」チェックをオンで[はい]
AcroPDF1.printPages 1, 2
'Windowsに処理を一旦渡す
DoEvents
'1秒とめる
Sleep 1000
'AcroPDF1.LoadFile AcroPDF1.src
AcroPDF1.printPages 15, 16
'Windowsに処理を一旦渡す
DoEvents
'1秒とめる
Sleep 1000
End Sub
上記でもダメな場合は
「Sleep 1000」->「Sleep 2000」
に変更してみて下さい。
「コマンドボタンをもう一度押したところ、どちらのページも印刷されません」が、
やや気になりますが。(汗
回答遅れてすみません。
最初はEXCELの質問掲示板で質問させてもらっていたのですが
教えて頂いているうちに、Excel側の問題ではなさそうでしたので
ここの管理人さんのところに来させてもらいました。
マルチになりそうでしたので回答遅れてすみません。
管理人さんに教えていただいた
Sleepを入れたプログラムで試してみたところ
1・2ページは印刷されました。
15・16ページは印刷されませんでした。
その後、もう一度コマンドボタンを押したところ、どちらのページも印刷されません。
「以後、メッセージを表示しない」チェックをオンで[はい]にチェックを入れると
その後印刷されないようです。
Excel質問掲示板のやりとりでは以下のようになっています。
http://www.excel.studio-kazu.jp/kw/20120427163339.html
こういった別掲示板の書き込みはいいのかわからないので、
不適切であれば削除して下さい。
却下されるであろうバージョンアップを検討しつつも
何か方法がないかと思っております…
あや さんへ。
別掲示板の内容は当初から検索で、知っていました。
マルチでもまったく構いません。
当サイトの知識ではできないことの方が多いと思っています。
別掲示板の方は続けて下さい。
※SendKeysでの処理方法はPC環境に大きく左右されるのでオススメできませんが。
こちらの方は(掲示板の情報も含めて)少し考えさせて頂きます。