
証明書セキュリティが設定されたPDFから証明書セキュリティ権限情報を取得します。
証明書セキュリティ付きPDFを開き、権限情報を取得します。
証明書セキュリティ付きPDFを開くには、PKCS#12証明書パッケージファイルと証明書パッケージファイルにかけられたパスワードが必要です。
開いたPDFからはユーザーアクセスフラグを含む各種情報を取得することができます。
ユーザーアクセスフラグで取得できる情報は以下の5項目です。
サンプルプログラムでは、入力PDFが持つセキュリティの情報を取得します。
列挙型定数が持つ具体的な内容は「6.1.1 セキュリティ設定(証明セキュリティ)」を参照してください。
package cookbook;
import jp.co.antenna.ptl.*;
public class GetEncryptInfoPubkeyPKCS12 {
// そのクラスのusageを表示する関数
private static void printUsage() {
System.out.println("usage: java GetEncryptInfoPubkeyPKCS12 in-pdf-file "
+ "PKCS#12-path [pkcs#12-password]");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
if (args.length < 2) {
printUsage();
return;
}
try (PtlParamInput inputFile = new PtlParamInput(args[0]);
PtlParamInput pkcs12Pubkey = new PtlParamInput(args[1]);
PtlPDFDocument doc = new PtlPDFDocument()) {
doc.setPassword(args[2]);
doc.setPKCS12(pkcs12Pubkey);
// PDFファイルをロードします。
doc.load(inputFile);
// 暗号化の取得
if (doc.isEncrypted()) {
// 暗号化情報の取得
showStdAndPermEncInfo(doc);
}
else {
System.out.println("暗号化されていないファイルです");
}
}
catch (PtlException pex) {
System.out.println("PtlException : ErrorCode = " + pex.getErrorCode() +
"\n " + pex.getErrorMessage());
}
...【GetPDFVersion.javaと同じ処理のため省略
・エラーメッセージ処理と出力】...
}
public static void showStdAndPermEncInfo(PtlPDFDocument doc)
throws PtlException, Exception, Error {
try (PtlEncrypt encrypt = doc.getEncrypt()) {
//全タイプのセキュリティハンドラで共通のデータを取得
// キー長の取得
System.out.println("暗号化のキー長 : " + encrypt.getKeyLength());
// 暗号化する文書コンポーネント取得
switch (encrypt.getEncryptComponent()) {
case ENCRYPT_ALL:
System.out.println("文書の全てのコンテンツを暗号化");
break;
case ENCRYPT_EXCEPT_METADATA:
System.out.println("文書のメタデータを除く全てのコンテンツを暗号化");
break;
case ENCRYPT_ONLY_ATTACHED_FILE:
System.out.println("添付ファイルのみを暗号化(AES暗号化のみで有効)");
break;
}
// 暗号化のフィルター取得
// FILTER_STANDARD : 標準セキュリティハンドラ */
if (encrypt.getFilterType() == PtlEncrypt.FILTER_TYPE.FILTER_STANDARD) {
//標準セキュリティハンドラの情報取得
//PtlEncryptStandardにダウンキャストして情報を渡す
getEncryptStandardInfo((PtlEncryptStandard)encrypt);
}
// FILTER_PUBKEY : 公開キーセキュリティハンドラ */
else if(encrypt.getFilterType() == PtlEncrypt.FILTER_TYPE.FILTER_PUBKEY) {
//公開キーセキュリティハンドラの情報取得
//PtlEncryptPubkeyにダウンキャストして情報を渡す
getEncryptPubkeyInfo((PtlEncryptPubKey)encrypt);
}
}
}
/**
* 公開キーセキュリティハンドラの情報を取得するメソッド
* @param encryptPubkey 公開キーセキュリティハンドラを表すクラス
* @throws PtlException
* @throws Exception
* @throws Error
*/
private static void getEncryptPubkeyInfo(PtlEncryptPubKey encryptPubkey)
throws PtlException, Exception, Error {
System.out.println("---セキュリティハンドラのタイプは公開キーセキュリティハンドラです。---");
// getFilterType()で判定済みなので PtlEncryptPubKey にダウンキャストする。
// 公開キーセキュリティハンドラのメソッド取得
switch (encryptPubkey.getMethod()) {
case METHOD_RC4:
System.out.println("公開キーセキュリティハンドラのメソッド : RC4");
break;
case METHOD_AES:
System.out.println("公開キーセキュリティハンドラのメソッド : AES");
break;
}
// ユーザアクセス許可フラグの取得
// PtlEncryptPermissionPubKeyを取得する
System.out.println("--ユーザアクセス許可フラグの情報を取得します--");
try (PtlEncryptPermissionPubKey permsPubkey = (PtlEncryptPermissionPubKey)encryptPubkey.getPermission()) {
if(permsPubkey.hasFullPermission()) {
System.out.println("このPDFではすべての権限が許可されています");
}
else {
System.out.println("このPDFでは個別に権限の許可・許可しないが設定されます");
}
// 印刷権限取得
switch (permsPubkey.getPrint()) {
case PERM_PRINT_NOT_ALLOWED:
System.out.println("印刷権限 : 許可しない");
break;
case PERM_PRINT_LOW:
System.out.println("印刷権限 : 低解像度");
break;
case PERM_PRINT_HIGH:
System.out.println("印刷権限 : 高解像度");
break;
}
// 変更権限取得
switch (permsPubkey.getModify()) {
case PERM_MODIFY_NOT_ALLOWED:
System.out.println("変更権限 : 許可しない");
break;
case PERM_MODIFY_ASSEMBLEDOC:
System.out.println("変更権限 : ページの挿入、削除、回転");
break;
case PERM_MODIFY_FILLFORM:
System.out.println("変更権限 : フォームフィールドの入力と既存の署名フィールドに署名");
break;
case PERM_MODIFY_ANNOTANDFORM:
System.out.println("変更権限 : 注釈の作成、フォームフィールドの入力と既存の署名フィールドに署名");
break;
case PERM_MODIFY_MODYFYDOC:
System.out.println("変更権限 : ページ抽出を除く全ての動作");
break;
}
// テキスト、画像、その他の内容のコピーを有効にするかどうかの取得
if (permsPubkey.getCopy()) {
System.out.println("テキスト、画像、その他の内容のコピーを有効にする");
}
else {
System.out.println("テキスト、画像、その他の内容のコピーを有効にしない");
}
// スクリーンリーダーデバイスのテキストアクセスを有効にするかどうかの取得
if (permsPubkey.getAccessibility()) {
System.out.println("スクリーンリーダーデバイスのテキストアクセスを有効にする");
}
else {
System.out.println("スクリーンリーダーデバイスのテキストアクセスを有効にしない");
}
}
}
/**
* 標準セキュリティハンドラの情報を取得するメソッド
* @param encryptStandard 標準セキュリティハンドラを表すクラス
* @throws PtlException
* @throws Exception
* @throws Error
*/
private static void getEncryptStandardInfo(PtlEncryptStandard encryptStandard)
throws PtlException, Exception, Error {
System.out.println("---セキュリティハンドラのタイプは標準セキュリティハンドラです。---");
// getFilterType()に判定済みなので PtlEncryptStandard にダウンキャストする。
// 標準セキュリティハンドラのメソッド取得
switch (encryptStandard.getMethod()) {
case METHOD_RC4:
System.out.println("標準セキュリティハンドラのメソッド : RC4");
break;
case METHOD_AES:
System.out.println("標準セキュリティハンドラのメソッド : AES");
break;
}
// ユーザアクセス許可フラグの取得
System.out.println("--ユーザアクセス許可フラグの情報を取得します--");
try (PtlEncryptPermission perms = encryptStandard.getPermission()) {
// タイプ取得
switch (perms.getType()) {
case PERM_TYPE1: {
System.out.println("標準セキュリティハンドラのリビジョン : 2");
// getType()で判定されたのでpermsをダウンキャストできる。
PtlEncryptPermissionType1 perms1 = (PtlEncryptPermissionType1)perms;
// 印刷権限取得
if (perms1.getPrint()) {
System.out.println("印刷を許可する");
}
else {
System.out.println("印刷を許可しない");
}
// 変更権限取得
switch (perms1.getModify()) {
case PERM_MODIFY_NOT_ALLOWED:
System.out.println("変更権限 : 許可しない");
break;
case PERM_MODIFY_ANNOTANDFORM:
System.out.println("変更権限 : 注釈の作成、フォームフィールドの入力と既存の署名フィールドに署名");
break;
case PERM_MODIFY_ASSEMBLEANDFORM:
System.out.println("変更権限 : ページレイアウト、フォームフィールドの入力と既存の署名フィールドに署名");
break;
case PERM_MODIFY_MODYFYDOC:
System.out.println("変更権限 : ページ抽出を除く全ての動作");
break;
}
// テキスト、画像、その他の内容のコピーおよびアクセシビリティを有効にするかどうかの取得
if (perms1.getCopy()) {
System.out.println("テキスト、画像、その他の内容のコピーおよびアクセシビリティを有効にする");
}
else {
System.out.println("テキスト、画像、その他の内容のコピーおよびアクセシビリティを有効にしない");
}
}
break;
case PERM_TYPE2: {
System.out.println("標準セキュリティハンドラのリビジョン : 3または4");
// getType()で判定されたのでpermsをダウンキャストできる。
PtlEncryptPermissionType2 perms2 = (PtlEncryptPermissionType2)perms;
// 印刷権限取得
switch (perms2.getPrint()) {
case PERM_PRINT_NOT_ALLOWED:
System.out.println("印刷権限 : 許可しない");
break;
case PERM_PRINT_LOW:
System.out.println("印刷権限 : 低解像度");
break;
case PERM_PRINT_HIGH:
System.out.println("印刷権限 : 高解像度");
break;
}
// 変更権限取得
switch (perms2.getModify()) {
case PERM_MODIFY_NOT_ALLOWED:
System.out.println("変更権限 : 許可しない");
break;
case PERM_MODIFY_ASSEMBLEDOC:
System.out.println("変更権限 : ページの挿入、削除、回転");
break;
case PERM_MODIFY_FILLFORM:
System.out.println("変更権限 : フォームフィールドの入力と既存の署名フィールドに署名");
break;
case PERM_MODIFY_ANNOTANDFORM:
System.out.println("変更権限 : 注釈の作成、フォームフィールドの入力と既存の署名フィールドに署名");
break;
case PERM_MODIFY_MODYFYDOC:
System.out.println("変更権限 : ページ抽出を除く全ての動作");
break;
}
// テキスト、画像、その他の内容のコピーを有効にするかどうかの取得
if (perms2.getCopy()) {
System.out.println("テキスト、画像、その他の内容のコピーを有効にする");
}
else {
System.out.println("テキスト、画像、その他の内容のコピーを有効にしない");
}
// スクリーンリーダーデバイスのテキストアクセスを有効にするかどうかの取得
if (perms2.getAccessibility()) {
System.out.println("スクリーンリーダーデバイスのテキストアクセスを有効にする");
}
else {
System.out.println("スクリーンリーダーデバイスのテキストアクセスを有効にしない");
}
}
break;
}
}
}
}
GetEncryptInfoPubkeyPKCS12.java
C:\samples>java cookbook.GetEncryptInfoPubkeyPKCS12 usage: java GetEncryptInfoPubkeyPKCS12 in-pdf-file PKCS#12-path [pkcs#12-password] C:\samples>java cookbook.GetEncryptInfoPubkeyPKCS12 Output_EncryptSetPubKeyWithX509.pdf testPKCS12.pfx testtest 暗号化のキー長 : 256 文書の全てのコンテンツを暗号化 ---セキュリティハンドラのタイプは公開キーセキュリティハンドラです。--- 公開キーセキュリティハンドラのメソッド : AES --ユーザアクセス許可フラグの情報を取得します-- このPDFでは個別に権限の許可・許可しないが設定されます 印刷権限 : 許可しない 変更権限 : 許可しない テキスト、画像、その他の内容のコピーを有効にしない スクリーンリーダーデバイスのテキストアクセスを有効にしない -- 完了 --