サンプルソースは http://www.adobe.com/jp/devnet/acrobat/sdk/eula.html
から Agree and download Acrobat X SDK for Windows (ZIP, 52.2 MB(sdk100_v1_win.zip)をダウンロードします。
ZIPファイル内の \Acrobat 10 SDK\Version 1\InterAppCommunicationSupport\VBSamples\AcrobatActiveXVB\AcrobatActiveXVB フォルダにVB.NETのサンプルが有ります。
古いバージョン(Acrobat 9以前)ではPro版でないとOLE操作は出来ません。
それ以降のバージョン(Acrobat X , XI , DC)では未確認です。
但し、最近頂いたコメントで Acrobar DC ではStandard版でもOLEが使用できると言うコメントを頂き、少しですが動作確認をしたところ、一応動きました。
「一応」と書いたのは厳密な動作確認は出来なかったからです。体験版をAdobe社は公開していますが、Acrobat DCに関してはPro版のみしか体験版は公開してません。
show さん
はじめまして。
パスワード関連はOLEでの機能提供はありません。
しかし、サイトマップに書いてある、PDFTK 又はQPDF がコマンドラインでパスワードの解除、設定をサポートしています。
コマンドラインでの操作ですから、VBA等のプログラミングから一括変更が可能になります。
当サイトではこの2つの解説予定はしていますが、時間が無くて今だ未着手です。
PDFTKの方が日本語で解説しているサイトが多いので、コチラの方をオススメします。
解決につながれば幸いです。
管理人さん、初めまして
Acrobat アドビフォーラムに以下の内容の相談をしていますが1件の返信もなく困ってます。
もう語りつくされた周知の事実なのでしょうか?
まったく情報がなく困っています。知っていることがあれば教えて頂けないでしょうか?
<質問内容>
AcroPDFLibを利用してVB.NETでPDFビューアを開発しています。希望として右クリックによるメニューの表示やCTRL+Pによる印刷ダイアログの表示を止めたいのですが手段が 分かりません。不可能であればそれを示す資料等があれば別の手段を考えるのですがそのような情報はないでしょうか?
駒井 さん
はじめまして
以下がAcroPDFLibに関するAdobe社の技術公開ページです。
http://help.adobe.com/livedocs/acrobat_sdk/10/Acrobat10_HTMLHelp/wwhelp/wwhimpl/js/html/wwhelp.htm
上記を開いたら、左側のメニューから
Acrobat Interapplication Communication > Interapplication Communication API Reference > OLE Automation > AxAcroPDFLib.AxAcroPDF
の順で開いていきます。
これが当サイトで見つけた唯一の技術資料です。
サンプルソースは
http://www.adobe.com/jp/devnet/acrobat/sdk/eula.html
から Agree and download Acrobat X SDK for Windows (ZIP, 52.2 MB(sdk100_v1_win.zip)をダウンロードします。
ZIPファイル内の \Acrobat 10 SDK\Version 1\InterAppCommunicationSupport\VBSamples\AcrobatActiveXVB\AcrobatActiveXVB フォルダにVB.NETのサンプルが有ります。
AcroPDFLibもOLEもそうですが、非常に古い技術です。
数年前からAcrobat本体のバージョンアップはあっても、この手のプログラミング技術のバージョンアップは無いです。(と言っても過言ではないです。)
理由は不明です。
公開資料も非常に不十分です。
当サイトはその数少ない資料を元にテスト結果で出したサイトです。
よって、ココ以上の情報が欲しければ、Adobe社の有償の技術サポート等を受けるしか手がないでしょう。多分ですが目が飛び出るほどのサポート料と勝手に予測しています。
他の人を見ると、PDF仕様書(英語版)を見て、PDFファイルをバイナリー操作してのが現状です。
多分、その様な事は望んで無いと受け取ってますので、上記で紹介したサイトの内容をご覧ください。
少しでも解決につながれば幸いです。
管理人さん
回答、誠にありがとうございました。
できないと判断するには十分です。
管理人さん、はじめまして。
このHPを参考にAcrobatを外部操作したいと考えています。
そのため、Acrobatの購入を検討し始めました。
AcrobatにはStandard版とPro版があるようなのですが、
このHPで紹介しておられる操作を行うには、Standard版で可能でしょうか?
それとも、Pro版の購入が必要になるのでしょうか?
よろしくお願いします。
ふじた さん
はじめまして
古いバージョン(Acrobat 9以前)ではPro版でないとOLE操作は出来ません。
それ以降のバージョン(Acrobat X , XI , DC)では未確認です。
但し、最近頂いたコメントで Acrobar DC ではStandard版でもOLEが使用できると言うコメントを頂き、少しですが動作確認をしたところ、一応動きました。
「一応」と書いたのは厳密な動作確認は出来なかったからです。体験版をAdobe社は公開していますが、Acrobat DCに関してはPro版のみしか体験版は公開してません。
Pro版なら確実に動作すると思いますが、Standard版は正確には不明です。
購入前ならAdobe社に問合せてみてはどうでしょうか。
http://www.adobe.com/jp/support/service_faq/before/
上記に購入前の問合せに関したサイトが有ります。
更に
https://helpx.adobe.com/jp/contact.html?step=APRO-APAP-APCC-ACRO-CPDF-ECHP-acrobat_deciding-what-to-buy_stillNeedHelp
を見ると、
電話(アドビストア / ご購入に関するお問い合わせもこちらから):
0120-61-3884
月曜~金曜の 9:30 - 20:00 (土日祝および当社指定休業日を除く)
と言うのが有りました。こちらの方がイイかもしれません。
解決につながれば幸いです。
※それと、結果を頂けると有難いです。(^_^;)
回答ありがとうございます。
あまりに回答が速くて驚きました。
購入相談に電話してみました。
OLE機能はStandard版もPro版も同じ機能が使用できるということでした。
「Acrobat DCプラン別機能比較」をもう一度確認してどちらにするか決めたいと思います。
ありがとうございました。
ふじた さんへ
結果を頂いて助かります。
早速、サイトに反映します。
管理人さん、はじめまして。
いろいろと調べているのですが、なかなか解決できない為、ご教授頂きたいのですが、複数ページのPDF内のテキストを1ページずつ読み取って、任意のソートキー(例えば郵便番号順)でVBAからAcrobatProを操作してPDFファイルのページの並び替えを行うことは可能でしょうか?
※こちらのサイトを参考にしてPDF内のテキストは読み取ることができています。
またAcrobatProとVBAでは不可能な場合、どのような環境でPDFのページの並べ替えが可能かをご教授頂けると大変有難いです。
たこし さん
はじめまして
「ページの並び替え」と言う機能そのものは無いです。ただし、並び替えに相当する機能を作ることは可能です。
以下は1つの例です。
① 対象のPDF(a)からページ番号と並び替えキー情報をVBA内で配列に持たせてVBAでその配列を並び替えする。
② 一時的に作業用にゼロ頁のPDF(wk)を作成。
例:AcroExch.PDDoc: Create メソッド
③ ①の並び替えた配列からページ番号を取り出し、元のPDF(a)から該当ページをPDF(wk)に順次追加していく。
例:ACROEXCH.PDDOC: INSERTPAGES メソッド
注意:このサンプルには問題点が有り!
④ 全て追加したら一旦、元のPDF(a)の全ページを削除する。
例:ACROEXCH.PDDOC: DELETEPAGES メソッド
⑤ PDF(wk)の全ページをゼロ頁のPDF(a)に追加する。
例:ACROEXCH.PDDOC: INSERTPAGES メソッド
⑥ PDF(a)を保存する。
例:ACROEXCH.PDDOC: SAVE メソッド
上記は作業用のPDF(wk)に並び替えたPDFを一時的に作ってしまいます。その内容を元のPDF(a)に戻すと言うやり方です。
PDF(wk)を最終的なPDFとして保存するには文書のプロパティに関する情報も更新しないといけません。文書のプロパティの更新に関してはまだ整理してなく、また結構厄介な部分が有ります。そこで文書のプロパティを変更しないで済む元のPDF(a)に並び替えた頁で一気に戻します。
それと③の処理は問題点が有ります。例の解説ページをよく見てください。この問題点に対処するにはもう一つ作業用のPDF(wk2)が必要になると思っています。VBAのロジックがその分だけ少し追加になりますが、それよりも処理速度が問題になるかもしれません。
処理速度を考える必要がある時は、コマンドラインツールのPDFtkやQPDFでも似たような処理が出来るはずですから、ご検討しても良いかと思います。このツールも並び替え機能は無いですが、挿入と削除ができるので上記と同様な考えでVBAからコントロール出来ると思っています。
処理時間、メンテナンス性、開発期間、ライセンス(フリーはダメ等)によってもやり方は変わると思います。
ご参考になれば幸いです。
ご教授頂きましてありがとうございました。
大変参考になりました。
教えて頂いた内容で、まずは実装してみようかと思います。
本当にありがとうございました。
管理人さん
イラストレーターでExcelから出力したPDFを読み込む作業をしているのですが、単純に読み込むとフォントが崩れるため、
アクロバットを利用して文字のアウトライン化をすることにしましたが、Excel VBAでのコードがわからず困っております。
アドビフォーラムにも問合せてみましたが、返事がなく・・
【VBA化にあたり参照した資料】
JavaScript for AcrobatR API Reference
を参照し、
pp = getPrintParams();
rf = pp.constants.rasterFlagValues;
pp.rasterFlags |= rf.textToOutline;
this.print(pp);
というコードから文字のアウトライン化は「textToOutline」を使用すればよいとわかったのですが、vbaに適用できません。
そもそも上記コードをアクロバット側で実行しても反映されなかったので、やり方が間違っていそうです。
もしおわかりになればどうぞよろしくお願いします。
(アクロバットは7を使っています。)
み さん 初めまして。
判る範囲で即答します。
上記サンプルは JavaScript for AcrobatR API Reference 資料の582頁・例1でしょうか。
これはAcrobat(アクロバット)アプリ内で専用に実行させるスクリプト「Acrobat JavaScript」の説明です。
よって、Excel VBAとは全く関係無いです。Excel VBA の言語ではないので、Excel VBA上では全く実行できません。
>・・上記コードをアクロバット側で実行しても反映されなかった・・
注意:Acrobat JavaScriptは全く詳しくないのですが・・・。
上記のサンプルをAcrobat XI(10.0.14)で実行したところ、・・(汗)・・、まずは印刷するためのダイアログが表示されます。それを手動で実行させると、埋め込んだ頁のみの文字がアウトライン化し、・・ました。
要は複数のPDFファイル内の文字を自動でアウトライン化したいという事だと勝手に予測しています。
当サイト内の情報のみでそれを実行するのはチョット無理が有ります。
また 使用しているAcrobatは 7 と書かれていますが。上記の説明書はAcrobat 8 です。その点も注意が必要です。更に実行OS(Windows ?)+Excelのバージョンも気になります。
Acrobat 7 テスト環境はコチラでも有りますが、動作させる条件がすぐには出来ません。
何か有りましたら、書き込みます。
※数日後かも管理人さん
さっそくありがとうございます!
サンプルはおっしゃる通り582ページです。
環境はOSはWin7(32bit)×Office2010(32bit)です。
やりたいことは、まさに「複数のPDFファイル内の文字を自動でアウトライン化」です。作成済のPDFを連続で変換していく仕組みができないか検討しております。
参照設定をしても、Excelから操作するのは難しいのですね。
今Acrobat X(10.0.0.396)に変えてみて、サンプルを実行したら管理人さんと同様に印刷ダイアログが表示されました・・
うーん、、難しいんですかね。。Excelみたいに、マクロの記録があるといいのですが。
もしおわかりになれば、引き続きどうぞよろしくお願いいたします。
み さんへ。
先に結論から。自動化は出来ました。v(^_^)
ExcelのVBAではなく、発想を変えて Acrobat XI のアクションウイザード(旧バッチ処理)を使います。
(判っているかもしれませんが)PDFをアウトライン化するにはPDF内部に「透かし」が存在している必要が有ります。よって、ダミーの「透かしの追加」 -> 「保存」の「最適化」時にアウトライン化を行う事でフォント無しのPDFが作成出来ました。
アクションウイザードの詳細な操作手順は別途、作成中です。後日公開。
VBAからAcrobat JavaScriptの実行も出来ないことは無いです。しかし、それ以前に Acrobat JavaScript の実行エラーが回避出来なく、海外のネット検索+イロイロと試行錯誤しましたが断念しました。
Windows 10 なら 標準装備 Microsoft Print to PDF を使えば透かしなど気にせずに、簡単にPDFのアウトライン化が出来ます。しかし、保存時のファイル名の入力の自動化が出来ません(正確には出来なかった)。本当はAcrobatを使わないでこの手を使いたかったです。
操作手順は少し、お待ち下さい。※2~3日ぐらい。
管理人さん
すごい!!
ありがとうございます。お返事が遅れてすみません。
>ダミーの「透かしの追加」 -> 「保存」の「最適化」時にアウトライン化を行う事でフォント無しのPDFが作成出来ました。
なるほど・・そこまでわかっておりませんでした。
操作手順、楽しみにしています。m(_ _)m
み さんへ。
以下を御覧ください。
Acrobat 9:複数のPDF内の文字を一括でアウトライン化(+裏技)
Acrobat X:複数のPDF内の文字を一括でアウトライン化(+裏技)
Acrobat XI:複数のPDF内の文字を一括でアウトライン化(+裏技)
Acrobat DC:複数のPDF内の文字を一括でアウトライン化(+裏技)
イラストレーターは無いので取り込みテストはしていません。
解決できることを願っています。
管理人さん!
お返事遅くなり申し訳ありません。
で、できました~!!ありがとうございます!
イラストレーターに取り込んだところ、無事アウトライン化されていたことを報告いたします。神!
み さんへ。
お役に立って、良かったです。(^_^)
管理人さん。
初めまして。
現在、複数のPDFファイルからプロパティを取得し
編集した内容を一括で書き込むVBAを作成しようとしています。
単純な内容だと思ったのですが、
いくつかテストしたところどうしても解決出来ない内容が出て来ました。
1.作成者とキーワードに読点やカンマがあると
ダブルクォーテーションが入る。
2.キーワードに既に登録されている場合(手作業などで登録)
抽出されない。またキーワードを書き込みすると書き換えられず、
追加される。
また、そのデータを抽出すると追加された分しか抽出されない。
といった現象が発生しています。
Acrobat X Pro/DC Proどちらでも発生します。
もし、おわかりでしたらご教示いただけますでしょうか。
seizi さん
はじめまして。
申し訳ありませんがコチラのサイトの都合で、上記の返答はコッチに変えさせて下さい。
管理人様、お世話になります。
QPDF、ExcelVBAを使用してパスワード付きPDFファイルの作成を
行おうと思っておりますが、サンプルが複雑なため、(あとはExcelVBA初心者でもあるのはありますが…)そのままコピペでできなさそうなイメージがわいております。
行いたいのは、
PDFファイル(ExcelVBAで作成)にユーザーパスワードを付けた状態のPDFファイルを作成し、保存するというシンプルなものなので、簡易的な方法はございませんでしょうか。また、他の方法があればご教示いただきたいと存じます。
わがままな連絡が申し訳ないですが、なにとぞよろしくお願い申し上げます。
OS:Windows7 or 10(Wundows7でも10でも動くことが必要)
Excel2010
NAO さん
はじめまして。
Qpdf : コマンドラインのPDFツールの「Qpdf を起動するサンプル」の28~30行を以下にします。
001 strCmd = "I:¥Tools¥Run¥Qpdf-6.0.0¥bin¥qpdf.exe " & _002 "--encrypt youser@pass """" 40 -- " & _
003 "D:¥In.pdf D:¥Out.pdf"
・--encrypt :encrypt オプションの開始
・youser@pass :ユーザーパスワード
・"" :オーナーパスワード。無設定なので""。
・40 :キーの長さ。これは今は深く考える必要は無し。
・-- :encrypt オプションの終了
・D:¥In.pdf :入力PDFファイルのフルパス
・D:¥Out.pdf :出力PDFファイルのフルパス
入力PDFにパスワードを直接掛ける事は出来ません。必ず出力ファイルを指定する必要が有ります。よってOut.pdfにパスワードが掛かります。
上記のサンプルはダウンロード(cLine-qpdfDemo.xls)出来ます。それを流用すると楽に使えると思っています。
上記以外のセキュリティ設定の場合は、以下を御覧ください。
Qpdf : PDFにパスワードとセキュリティ設定をコピーするVBA関数
上記はセキュリティ設定をしたPDFのセキュリティ部分のみを他のPDFへコピーするサンプルです。
PDFのセキュリティ設定はネット上に山の様に解説が有るので、それが参考になります。
そのPDFを利用して、上記サンプルでセキュリティ部分のみをコピーします。
これ以上の「簡易的な方法」は無いです。
頑張ってください。
管理人様
ご回答ありがとうございます。
INPUTファイルとOUTPUTファイルが同じではできない仕様になっているようですね。
(同じファイル名の場合、エラーとなりました)
これで問題なくできると思います。(コマンドプロンプト上で実行したら、できました)
ありがとうございました。
NAO さんへ
お役に立ったみたいで嬉しいです。