PDFに指定のフォルダでのみ閲覧可能な閲覧制限をかけます。
PDFを指定のフォルダでのみ閲覧可能な状態にすると、そのPDFを指定したURI以外のフォルダ上に配置した場合に閲覧不可となります。
閲覧不可の場合、事前に設定した透かしなどが表示されます。
この機能を用いると例えば、
「PDFが特定の共有フォルダに置かれている場合だけ閲覧可能だが、PDFをローカルにコピーしてくると閲覧不可になる」
ような設定が可能です。
本プログラム例では"C:/temp"フォルダを閲覧可能なURIとして指定します。また、閲覧できないページを識別するために透かしを設定し、閲覧制限を設定後に保存します。
package cookbook; import jp.co.antenna.ptl.*; public class SetRestrictionByURI { /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 3) { System.out.print("usage: java SetRestrictionByURI in-pdf-file out-pdf-file "); System.out.println("out-pdf-ownerpass [in-pdf-password]"); System.out.println("in-pdf-fileが暗号化されていない場合は128 bit AES で暗号化します。"); return; } // コマンドライン引数の取得 String outOwnerPass = args[2]; // コマンドライン引数の取得 String outOwnerPass = args[2]; ...【EncryptWithUserPass.javaと同じ処理のため省略 ・PtlParamInputを用いてPtlPDFDocument docに入力PDFをロード ・PtlParamOutputを用いて出力PDF名を指定 ・入力PDF用パスワードが指定されていればそれをセットした上でPDFをロードする】... // 閲覧場所の制限設定 setRestrictionByURI(doc); if (doc.isEncrypted()) { if(doc.getEncrypt().getKeyLength() >= 128){ //キー長が128以上の場合は設定を引き継げる // 暗号化情報の取得 System.out.println("暗号化されたファイルです。設定を引き継ぎます。"); setOwnerPass(doc, outOwnerPass, doc.getEncrypt()); } else { //V7.0以降、キー長が40の場合はこのまま暗号化できない。 System.out.println("入力ファイルが128bitより短いキー長で暗号化されています。"); System.out.println("新規に暗号化します。"); encrypt128AESwithOwnerpass(doc, outOwnerPass); } } else { System.out.println("暗号化されていないファイルです。"); encrypt128AESwithOwnerpass(doc, outOwnerPass); } ...【EncryptWithUserPass.javaと同じ処理のため省略 ・PtlParamOutputを用いてPtlPDFDocument docの内容を出力 ・PtlException, Exception, Error を catchするエラー処理 ・finally文で"--完了--"と表示する処理】... } public static void setRestrictionByURI(PtlPDFDocument doc) throws PtlException, Exception, Error { try (PtlParamRestriction restriction = new PtlParamRestriction()) { // 閲覧可能とするURIの追加 restriction.appendValidURL("C:\\temp"); // 透かしの設定 setWaterMarkToRestriction(restriction); // 閲覧制限の設定 doc.setRestriction(restriction); } } public static void setWaterMarkToRestriction(PtlParamRestriction restriction) throws PtlException, Exception, Error { ...【SetRestrictionWithTime.javaと同じ処理のため省略。 ・閲覧不可の際に表示するためのテキスト透かしの書式を設定する。】... } ...【encrypt128AESwithOwnerpass()の処理がSetRestrictionWithTime.javaと同じ処理のため省略。 ・128 bit AES形式で暗号化し、オーナーパスワードをかける。閲覧権限は変更しない】... ...【setOwnerpass()の処理がSetRestrictionWithTime.javaと同じ処理のため省略。 ・与えられたPtlEncrypt encryptにオーナーパスワードを設定する。】... }
SetRestrictionByURI.java
C:\samples>java cookbook.SetRestrictionByURI usage: java SetRestrictionByURI in-pdf-file out-pdf-file out-pdf-ownerpass [in-pdf-password] in-pdf-fileが暗号化されていない場合、40bitRC4で暗号化されていた場合は128 bit AES で暗号化します。 C:\samples>java cookbook.SetRestrictionByURI CSS-Print-v4.pdf CSS-Print-URI.pdf 123456 暗号化されていないファイルです。 128 bit AES形式で暗号化します。