PDFlib で三種類のパスワードを設定する
PDF ではパスワードを設定して文書を暗号化したり、ページの印刷や文章のコピー等を制限することができます。これらの設定は PDFlib でも文書作成時に行うことができます (※)。ここでは、PDF で設定できるセキュリティ項目について解説した後、実際に PDFlib で PDF を作成します。
※ 既存の PDF 文書に対してパスワードを設定する場合、PDFlib PLOP を使用します。
設定できるパスワード
PDF に設定できるパスワードは下記の通りです。
- PDF を開くためのパスワード
- 添付ファイルを開くためのパスワード
- 上記のパスワードやその他の権限を設定、変更するためのパスワード
Adobe 社では上記のパスワードをそれぞれ、文書を開くパスワード、添付ファイルを開くパスワード、権限パスワードと呼んでいます。対して PDFlib では文書を開くパスワードをユーザーパスワード、権限パスワードをマスターパスワード、添付ファイルを開くパスワードを添付パスワードと呼んでいます。
文書を開くパスワード | ユーザーパスワード (userpassword) |
権限パスワード | マスターパスワード (masterpassword) |
添付を開くパスワード | 添付パスワード (attachmentpassword) |
また、PDFlib ではユーザーパスワードとマスターパスワードについて、Adobe Acrobat とは異なる制限があります。
- ユーザーパスワードを設定する場合は必ずマスターパスワードも設定する必要がある
- ユーザーパスワードとマスターパスワードを同じにすることはできない
これらは Adobe Acrobat にはない制限ですが、文書を開くパスワードさえ知っていればパスワードを外せてしまう事態を防ぐためと思われます。一方添付ファイルを開くパスワードについては、マスターパスワードがなくても設定することができます。
ユーザーパスワードや添付パスワードが設定された場合、PDFlib は出力ファイルを暗号化します。これにより、設定されたパスワードを知らないユーザーはファイルを見ることはできません。
設定できる権限
マスターパスワードを設定していると、PDF ビューワーの機能の一部を制限することができます。設定できる権限は以下の通りです。
- 印刷の禁止、または高画質印刷を禁止
- フォームフィールドの追加等の文書の変更を禁止
- テキストやイメージのコピーを禁止
- フォームフィールドへの記入を禁止
- アクセシビリティのためのテキストやイメージの抽出を禁止
- ページの挿入や削除、回転等の編集の禁止
- 文書を開くパスワードを設定時、XMP メタデータは暗号化しないよう設定
これらの制限は PDF ファイルに付加情報として設定され、Adobe Acrobat 等多くの PDF ビューワーでは正しく適用されます。しかしながら、設定を無視するような PDF ビューワーもあり、その場合は適用されません。
サンプルコード
以下に文書を開くパスワードと添付パスワードを設定した PDF を出力するサンプルコードを記載します。文書を開くパスワード (ユーザーパスワード) を設定する場合、マスターパスワードも必ず設定する必要があります。
また、permissions オプションにより、PDF の印刷とテキストのコピーを制限しています。
/*
* パスワードと権限を設定した PDF を作成するサンプルコード
*/
import java.io.*;
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;
public class security {
public static void main(String[] args) {
pdflib p = null;
int font;
String optlist;
try {
p = new pdflib();
p.set_option("searchpath=../data");
p.set_option("searchpath=../resource/fonts");
p.set_option("FontOutline={MS-Gothic=msgothic.ttc}");
// 文書を開くパスワード (userpassword) と
// 権限パスワード (masterpassword) を設定
optlist = "userpassword=hoge masterpassword=fuga";
// 印刷とコピーに関する権限を設定
optlist += " permissions={noprint nocopy}";
optlist += " attachments={{description={パスワード付き添付ファイル}" +
" filename={nesrin.jpg}}}";
// 添付ファイルを開くパスワード (attachmentpassword) を設定
optlist += " attachmentpassword=bar";
font = p.load_font("MS-Gothic", "unicode", "");
p.begin_document("security.pdf", optlist);
p.begin_page_ext(0, 0, "width=a4.width height=a4.height");
optlist = "font=" + font + " fontsize=24";
p.fit_textline("パスワード付き PDF", 50, 700, optlist);
p.end_page_ext("");
p.end_document("");
p.close_font(font);
}
catch (PDFlibException e) {
System.err.println("例外が発生しました");
System.err.println("例外コード: " + e.get_errnum());
System.err.println("例外メッセージ: " + e.get_errmsg());
System.err.println("API 名: " + e.get_apiname());
}
catch (Exception e) {
System.err.println(e.getMessage());
}
finally {
if (p != null)
p.delete();
}
}
}
Java 1.7 / PDFlib 9