Я попробовал этот код, чтобы зашифровать мой PDF, так что пользователи не могут копировать содержимое из PDF (только для тестирования, я знаю, что есть что-то, как OCR'ing: р)Шифрование PDF с IText запретить копирование содержимого и печать
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-файл, я все равно могу выбрать его содержимое. Я использую iText 5.0.2.
Любая идея о том, что я делаю неправильно?
Просьба также предоставить предоставленный PDF-файл. – mkl
Простое предоставление только разрешений, которые вы хотите разрешить, вместо того, чтобы отрицать права на совместное использование OR-ed, может это сделать. Почему вы используете там отрицание? –
@mkl: это тот, который вы можете использовать: http://www.selab.isti.cnr.it/ws-mate/example.pdf –