Excelのシートに記述された処理内容でVBAでPDFにパスワード付加する

Excelのシートに記述された処理内容でVBAでPDFにパスワード付加するということで、JavaのJSObjectマニュアル漁ったんですがダメでした。JSObjectマニュアルのセキュリティやtrusted署名を付加するあたりのサンプルコードにありそうですが全部英語なので時間がかかりそう)ということで、手っ取り早く VBAのSendKeysでやってみた。この場合、Acrobat StanderdかProが必要

画像

まぁ、とりあえず、ユーザーパスワードをつけることはできたっす。ただ、VBAのSendKeysだと途中でアクティブウィンドウが変わると悲惨な結果になるし、そもそも、セキュリティダイアログの設定が変わっていれば、その時点で破綻するしなぁ。その上、WshShellのAppActivateは、プロセスIDをサポートしてないし、そうなるとバイナリリソースエディタでAcrobatのDialog解析して必要な部分のコントロールID探して、そしてSendMessageなどのWin32API叩いて、となるとこりゃVBAだけでやるのは、骨が折れるわい。

ということで

画像

こんな感じです。

ということで、C#のパッケージ漁るとなんかあるだろう?とググるとありました。(感謝)

C# iTextSharp で PDF へパスワードを設定する。

ということで、久しぶりに錆ついたVisual Studio 2019を起動して、パッケージ入れて、コマンドラインのPassWord追加のコマンドライン版を上記サイトのソースをサクッと改変して作成。

そしてVBA からはWshShell 経由で動かす、VBAのshell関数は、非同期でやっつけるのでやっぱ、ここは同期したいということで、VBAはセルの情報を1行ごとに拾ってコマンドラインを生成するのを作れば、作成完了。

画像

VBAのSendKeysではタイミング取るのにsleepさせたりと、結構、行き当たりばったりの感じだったのですが、C#のをWshScriptで同期してコールすると、全く無駄がないし、一瞬で作業が終わる、なかなか良かったっす。この場合、Acrobat StanderdかProが不要

もうちょっと熟成させてみて、公開するかも?

Leave a Reply