Friday, March 15, 2019

閲覧期限を過ぎたPDFは読めないようにするには

PDF文書を第三者と共有するとき、特定の期日までは読んでもかまわないが、それ以降は乱用を防ぐために削除したいことがある。削除したいと言っても、相手のパソコンから勝手に削除することはできないので、期限が過ぎたら、共有したPDFを開いても読めないようなPDFを作って渡すのはどうだろうか。

そういった仕掛け付きのPDFを作るには、アドビの「Acrobat Pro DC」が必要だ。有料だが、月々1580円(年間契約あり)から使える。考え方としては、PDF上に邪魔なボタンを配置しておき、期日まではJavaScriptで自動的にそのボタンを非表示にするが、期日をすぎるとJavaScriptが動作しなくなって、邪魔なボタンが表示されたままになる……という仕組みだ。

ここで紹介する手順で作成したPDFは、「Acrobat Reader DC」または「Acrobat Pro DC」など、JavaScriptの実行が可能な一部のPDFリーダーでしか正しく開けないことに注意してほしい。Macの「プレビュー」などJavaScriptの実行機能がないビューワーでは、邪魔なボタンが表示されたままになり、正しく表示できない。

なお、この方法で作成したPDFは、設定した期日後になれば絶対に開けないというわけではない。パソコンに詳しい人なら開く方法を思いつくかもしれないので、過信は禁物だ。また、無料の「Acrobat Reader DC」だけでは、以下の手順は実行できない。

322 01
▲閲覧期限を設定したいPDFをAcrobat Pro DCで開く。右のメニューから「フォームを準備」をクリック

322 02
▲次の画面でファイルを選択しておき、「開始」をクリックする

322 03
▲ファイルによっては、フォームが配置されてしまうことがあるが、その場合はクリックして選択し、Deleteキーを押してフォームは削除しておこう

322 04
▲画面上のツールバーでフォームボタンをクリックし、隠したい部分の上をドラッグすると、ボタンを配置できる

322 05
▲巨大なボタンが配置できた。「フィールド名」にボタンの名前をつけるが、半角英数字で適当な文字列を入力しよう。なお、あとでボタンの名前を入力しなければならないので、メモしておくとよい

322 06
▲メニューの「表示」→「表示切り替え」→「ナビゲーションパネル」→「ページサムネール」を選択し、画面左にページサムネールのバーを表示する

322 07
▲ボタンを配置したページのサムネールを右クリックして「ページのプロパティ」を選択する

322 08
▲「ページのプロパティ」ダイアログが表示されるので、「アクション」タブの「トリガーを選択」で「ページを開く」を、「アクションを選択」で「JavaScriptを実行」を選択して「追加」ボタンをクリックする

322 09
▲「JavaScriptエディター」ダイアログが表示された。ここで中央の欄にJavaScriptのコードを書き込む。コードについては、以下の記述を参照してほしい


JavaScriptのコードをカスタマイズして入力する

次に、PDFを開いたときに邪魔なボタンを非表示にするためのJavaScriptのコードを入力する。この下に貼り付けるコードを掲載するので、メモ帳などにいったんコピーし、閲覧期限の「2019/03/20」を好きな日にちに書き換えてほしい。また、開けないときのメッセージは、ここでは「can't open」としたが、好きなように書き換えてかまわない。そして、ボタンを配置したときに「フィールド名」に入力したボタン名を、以下のコードの「kakusu」のところに入力する。なお、月日は2桁でないと正しく動作しない。2020年4月5日なら「2020/04/05」としよう。

コードの書き換えが終わったら、コード全体をコピーして、「JavaScriptエディター」ダイアログにペーストし、「OK」ボタンをクリックしよう。

var comDate = "2019/03/20";
var comField = this.getField("kakusu");
var d = new Date();
var z = "yyyy/mm/dd";
if (comDate < util.printd(z,d)) {
app.alert ("can't open");
comField.display = display.visible;
} else { 
comField.display = display.hidden; 
} 

※コードの末尾にカッコが足りなかったので、修正しました(2020/7/11)。ご指摘ありがとうございました。

322 10
▲「ページのプロパティ」ダイアログに戻るので、「OK」ボタンをクリック

322 11
▲すると、もとの邪魔なボタンが表示された画面に戻る。ボタンの設定を確認するため、ボタンを右クリックし、「プロパティ」をクリック

322 12
▲「ボタンのプロパティ」ダイアログが表示される。「一般」タブの「一般プロパティ」で「表示と印刷」が「表示」になっていることを確認しよう。ここが「非表示」などになっていると、期限を過ぎても邪魔なボタンが表示されず、そのまま読めてしまう


PDFファイルに編集制限をかける

ここまでの操作で閲覧期限を設定することはできたので、一度、Acrobat Reader DCや、本来うまく表示されないはずのPDFリーダーで動作を確認してみよう。狙い通りの動きをしないときは、コピー&ペーストしたJavaScriptのコードに書き間違いがないか、上で確認した「ボタンのプロパティ」ダイアログの設定が間違っていないかを調べてみてほしい。

次に、編集機能を制限するためのパスワードを設定する。これは、PDFを受け取った人がこのPDFを編集して、設定した閲覧期限を勝手に削除できないようにするための手順だ。

322 13
▲右側のメニューで「保護」を選択すると、画面上にツールバーが表示される。「詳細オプション」→「セキュリティプロパティ」を選択する

322 14
▲「文書のプロパティ」ダイアログが開くので、「セキュリティ」タブの「セキュリティ方法」で「パスワードによるセキュリティ」を選択する

322 15
▲「パスワードによるセキュリティ」ダイアログが開くので、「文書の印刷および〜」にチェックを付けて、「権限パスワード」に編集機能を制限するためのパスワードを入力して「OK」をクリック。このパスワードを忘れて、元のPDFファイルを削除してしまうと、閲覧期限の変更などができなくなるので注意する。これで手順はすべて完了だ

322 16
▲設定した閲覧期限を過ぎたPDFを開こうとすると、このようにアラートが表示される。「OK」をクリックしてダイアログを消しても、下に表示された邪魔なボタンは消えないので、文書の中身を見ることができない



類似の機能を提供するサービスも存在するが、そちらはAcrobat Pro DC以外の料金がかなり掛かる。かなり長い手順なので、よほど大切な文書でないとやりたくないかもしれないが、最小限のコストで収めたいなら、この方法がベストだろう。

3 comments:

くわさん said...

参考にさせていただき、とても助かりました。
ありがとうございます。

1点、Javascriptのコードですが、ブログ上の物は最後の{}が閉じられていないため、
そのままでは動きませんでしたので、お知らせしておきます。

M.K. said...

うわ、本当ですね。
ありがとうございます!修正しておきます。

Unknown said...

とても助かります。

質問ですが、隠したいページが複数ある場合、全部のページをフォームで隠すことになり、かつフィールド名も増えますが、その場合のjavascriptの書き方を教えて頂けませんか。