
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形式で暗号化します。