PDFlib で三種類のパスワードを設定する
   PDF ではパスワードを設定して文書を暗号化したり、ページの印刷や文章のコピー等を制限することができます。これらの設定は PDFlib でも文書作成時に行うことができます (※)。ここでは、PDF で設定できるセキュリティ項目について解説した後、実際に PDFlib で PDF を作成します。
   
  
   設定できるパスワード
   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
   
  
 (Jan 30, 2018 - Dec 27, 2024)