2

このコードを試してPDFを暗号化し、ユーザーがPDFからコンテンツをコピーできないようにしました(テストのためだけに、OCRとして何かがあることを知っています:p)

import java.io.FileOutputStream;

import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;

public class EncryptPDF {

private static final String INPUT_FILENAME = "/tmp/test.pdf";
private static final String OUTPUT_FILENAME = "/tmp/test_encrypted.pdf";
private static final String USER_PASSWORD = "";
private static final String OWNER_PASSWORD = "foobar";

public static void main(String[] args) {
    PdfReader reader = null;
    FileOutputStream out = null;
    PdfStamper stamper = null;

    try {
        // Define input
        reader = new PdfReader(INPUT_FILENAME);

        // Define output
        out = new FileOutputStream(OUTPUT_FILENAME);

        // Encrypt document
        stamper = new PdfStamper(reader, out);
        stamper.setEncryption(USER_PASSWORD.getBytes(), OWNER_PASSWORD.getBytes(), ~(PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING), PdfWriter.STANDARD_ENCRYPTION_128);
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        if (stamper != null) {
            try {
                stamper.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        if (out != null) {
            try {
                out.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

}
}

...しかし、PDFを開いても、そこからコンテンツを選択できます。iText5.0.2を使用しています。

私が間違っていることについて何か考えはありますか?

4

1 に答える 1

1

質問への私のコメントで述べたように、サンプルコードをそのまま実行すると、while ---が発生します。これは、最初にを閉じてから後で閉じるので非常に自然ですNullPointerExceptionが、後者のメソッドは(すでに閉じられている)作業にアクセスします。stamper.close()PdfReaderPdfStamper,close()PdfReader

ただし、を閉じる順序とPdfReader逆の順序でコードを実行するとPdfWriter、必要に応じてアクセス権を含む適切な結果ファイルが得られます。

印刷とコピーが無効として表示されている保護されたPDFのドキュメントプロパティ

PS:私はiTextバージョン5.3.5を使用しています。呼び出しの順序を逆にしてもclose()問題が解決しない場合は、バージョン5.0.2から更新することをお勧めします。

于 2013-02-11T09:22:11.433 に答える