
PDF文書にオーナーパスワードによる利用制限を設定します。
PDF文書にオーナーパスワードを設定すると、PDF文書の内容の利用制限を設定できます。本サンプルではオーナーパスワード設定時の暗号アルゴリズムの選択、および暗号キーの長さを指定する方法を示します。
文書内容の利用制限は①印刷権限設定、②変更権限設定、③コピー権限設定、④アクセシビリティ権限設定が全て「許可しない」固定になっています。利用制限の設定については次項以降で詳しく説明します。
なお、『PDF Tool API V7.0』以降では40ビットRC4を用いた暗号化は禁止されているため、本プログラムで40ビット RC4を指定することはできません。
package cookbook;
import jp.co.antenna.ptl.*;
public class EncryptWithOwnerPass {
// そのクラスのusageを表示する関数
public static void printUsage() {
System.out.print("usage: java EncryptWithOwnerPass in-pdf-file out-pdf-file");
System.out.println("暗号化種類 out-pdf-ownerpass [in-pdf-password]\n");
System.out.println("暗号化種類");
System.out.println("0 : 128 bit RC4 1 : 128 bit AES 2 : 256 bit AES");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
if (args.length < 4) {
printUsage(); // usageメッセージの表示
return;
}
int kind;
try {
kind = Integer.parseInt(args[2]);
switch (kind) {
case 0:
case 1:
case 2:
break;
default:
System.out.println("暗号化種類には、0から2の数値を指定してください。");
printUsage(); // usageメッセージの表示
return;
}
}
catch(NumberFormatException numfe) {
System.out.println("暗号化種類には、0から2の数値を指定してください。");
printUsage(); // usageメッセージの表示
return;
}
// コマンドライン引数の取得
String outOwnerpass = args[3];
...【EncryptWithUserPass.javaと同じ処理のため省略
・PtlParamInputを用いてPtlPDFDocument docに入力PDFをロード
・PtlParamOutputを用いて出力PDF名を指定
・入力PDF用パスワードが指定されていればそれをセットした上でPDFをロードする】...
// セキュリティ設定
switch (kind) {
case 0:
// 128 bit RC4
encrypt128RC4withUserPass(doc, outUserPass);
break;
case 1:
// 128 bit AES
encrypt128AESwithUserPass(doc, outUserPass);
break;
case 2:
// 256 bit AES
encrypt256AESwithUserPass(doc, outUserPass);
break;
}
...【EncryptWithUserPass.javaと同じ処理のため省略
・PtlParamOutputを用いてPtlPDFDocument docの内容を出力
・PtlException, Exception, Error を catchするエラー処理
・finally文で"--完了--"と表示する処理】...
}
public static void encrypt128RC4withOwnerpass(PtlPDFDocument doc, String outOwnerpass)
throws PtlException, Exception, Error
{
// 128 bit RC4
System.out.println("128 bit RC4暗号化の設定をします。");
try (PtlEncryptStandard128RC4 enc128r = new PtlEncryptStandard128RC4())
{
setEncryptWithOwnerpass(doc, outOwnerpass, enc128r);
}
}
public static void encrypt128AESwithOwnerpass(PtlPDFDocument doc, String outOwnerpass)
throws PtlException, Exception, Error
{
// 128 bit AES
System.out.println("128 bit AES暗号化の設定をします。");
try (PtlEncryptStandard128AES enc128a = new PtlEncryptStandard128AES())
{
setEncryptWithOwnerpass(doc, outOwnerpass, enc128a);
}
}
public static void encrypt256AESwithOwnerpass(PtlPDFDocument doc, String outOwnerpass)
throws PtlException, Exception, Error
{
// 256 bit AES
System.out.println("256 bit AES暗号化の設定をします。");
try (PtlEncryptStandard256AES enc256 = new PtlEncryptStandard256AES())
{
setEncryptWithOwnerpass(doc, outOwnerpass, enc256);
}
}
public static void setEncryptWithOwnerpass(PtlPDFDocument doc, String outOwnerpass, PtlEncryptStandard enc)
throws PtlException, Exception, Error {
// 暗号化するコンテンツを設定
// ENCRYPT_ALL : 全て暗号化
enc.setEncryptComponent(PtlEncrypt.ENCRYPT_COMPONENT.ENCRYPT_ALL);
// ユーザパスワード値の設定
enc.setOwnerPassword(outOwnerpass);
// ユーザアクセス許可フラグの取得・設定
try (PtlEncryptPermissionType2 perms2 = new PtlEncryptPermissionType2())
{
// 印刷権限の設定
// PERM_PRINT_NOT_ALLOWED : 許可しない
perms2.setPrint(PtlEncryptPermissionType2.PERMISSION_PRINT.PERM_PRINT_NOT_ALLOWED);
// 変更権限の設定
// PERM_MODIFY_NOT_ALLOWED : 許可しない
perms2.setModify(PtlEncryptPermissionType2.PERMISSION_MODIFY.PERM_MODIFY_NOT_ALLOWED);
// テキスト、画像、その他の内容のコピーを有効にするかどうかの設定
// false : 有効にしない
perms2.setCopy(false);
// スクリーンリーダーデバイスのテキストアクセスを有効にするかどうかの設定
// false : 有効にしない
perms2.setAccessibility(false);
// ユーザアクセス許可フラグの設定
enc.setPermission(perms2);
}
doc.setEncrypt(enc);
}
}
EncryptWithOwnerPass.java
オーナーパスワードを設定する例です。

最初の例は、暗号化キーの長さ128ビットRC4で、パスワードのかかっていないPDF文書を暗号化しています。次の例は、最初に暗号化したPDF文書を入力して、暗号化キーの長さ128ビットAESで暗号化し直しています。