
PDF文書にユーザーパスワードによるセキュリティを設定します。
PDF文書を入力してユーザーパスワードによるセキュリティを設定します。ユーザーパスワードによるセキュリティを設定すると、PDFリーダーや編集ソフトなどでPDF文書を開くときにパスワードの入力を求めるようになります。正しいパスワードを入力しないとPDF文書を開くことができません。
『PDF Tool API』には暗号化の種類(暗号化のアルゴリズムと暗号化のキーの長さ)を表現する4つのクラスが用意されていますが、『PDF Tool API V7.0』以降では40ビットRC4を用いた暗号化は禁止されています。40ビットRC4を指定した場合はプログラムがエラーを出力します。本プログラム例では「暗号化種類」パラメータの数値でそれら暗号化の種類を設定します。
| パラメータ | 暗号化の種類 | 暗号化クラス |
|---|---|---|
| 0 | 40ビットRC4(※) | PtlEncryptStandard40RC4 |
| 1 | 128ビットRC4 | PtlEncryptStandard128RC4 |
| 2 | 128ビットAES | PtlEncryptStandard128AES |
| 3 | 256ビットAES | PtlEncryptStandard256AES |
※ 『PDF Tool API V7.0』以降では暗号化が不可となっている。
PDFの上位バージョンほど強力な暗号が使えます。指定した暗号化の種類によっては、出力PDF文書のバージョンをより上位バージョンに変更します(参照先を参照)。
本プログラム例では、暗号化する文書コンポーネントは「全て暗号化」に固定しています。暗号化する文書コンポーネント設定の詳細は1.1.3 暗号化の対象を参照してください。
package cookbook;
import jp.co.antenna.ptl.*;
public class EncryptWithUserPass {
// そのクラスのusageを表示する関数
public static void printUsage() {
System.out.print("usage: java EncryptWithUserPass in-pdf-file out-pdf-file ");
System.out.println("暗号化種類 out-pdf-userpass [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 outUserPass = args[3];
try (PtlParamInput inputFile = new PtlParamInput(args[0]);
PtlParamOutput outputFile = new PtlParamOutput(args[1]);
PtlPDFDocument doc = new PtlPDFDocument())
{
if (args.length > 4)
{
String password = (String)args[4];
// パスワードのセット
doc.setPassword(password);
}
// PDFファイルをロードします。
doc.load(inputFile);
// セキュリティ設定
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;
}
// ファイルに保存します。
doc.save(outputFile);
}
...【GetEncryptInfo.javaと同じ処理のため省略
・PtlException, Exception, Error を catchするエラー処理
・finally文で"--完了--"と表示する処理】...
}
public static void encrypt128RC4withUserPass(PtlPDFDocument doc, String outUserPass)
throws PtlException, Exception, Error
{
// 128 bit RC4
System.out.println("128 bit RC4暗号化の設定をします。");
try (PtlEncryptStandard128RC4 enc128r = new PtlEncryptStandard128RC4())
{
setEncryptWithUserPass(doc, outUserPass, enc128r);
}
}
public static void encrypt128AESwithUserPass(PtlPDFDocument doc, String outUserPass)
throws PtlException, Exception, Error
{
// 128 bit AES
System.out.println("128 bit AES暗号化の設定をします。");
try (PtlEncryptStandard128AES enc128a = new PtlEncryptStandard128AES())
{
setEncryptWithUserPass(doc, outUserPass, enc128a);
}
}
public static void encrypt256AESwithUserPass(PtlPDFDocument doc, String outUserPass)
throws PtlException, Exception, Error
{
// 256 bit AES
System.out.println("256 bit AES暗号化の設定をします。");
try (PtlEncryptStandard256AES enc256 = new PtlEncryptStandard256AES())
{
setEncryptWithUserPass(doc, outUserPass, enc256);
}
}
public static void setEncryptWithUserPass(PtlPDFDocument doc, String outUserPass, PtlEncryptStandard enc)
throws PtlException, Exception, Error
{
// 暗号化するコンテンツを設定
// ENCRYPT_ALL : 全て暗号化
enc.setEncryptComponent(PtlEncrypt.ENCRYPT_COMPONENT.ENCRYPT_ALL);
// ユーザパスワード値の設定
enc.setUserPassword(outUserPass);
doc.setEncrypt(enc);
}
}
EncryptWithUserPass.java
ユーザーパスワードを設定する例です。

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