попытка защитить PDF (iText), попытка запретить пользователям копировать содержимое PDF

Ниже мой код. Моя цель - создать PDF-файлы, в которых конечные пользователи могут делать все, что захотят, КРОМЕ копирования текста (выберите текст и КОПИРОВАТЬ в блокнот). Кто-нибудь может объяснить, какой код должен быть в строке 18? Я разрешаю печать, но не ALLOW_COPY)

У меня сложилось впечатление, что приведенного ниже кода достаточно, чтобы запретить пользователям делать это, но «де-факто» они могут копировать выделенный текст и вставлять содержимое в блокнот.

Большое спасибо!

package com.itext;

import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.IOException;
import com.itextpdf.text.DocumentException;

public class ProtectMePdf 
{ 
public static void main(String[] args) throws IOException, DocumentException 
{
    Document document = new Document();
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("/Users/adhg/protectMe.pdf"));

    //LINE 18: what's wrong with this line? - if you run the code you will be able to copy the selected text. 
    writer.setEncryption(null, null, PdfWriter.ALLOW_PRINTING, PdfWriter.STANDARD_ENCRYPTION_128);


    writer.createXmpMetadata();
    document.open();
    document.add(new Paragraph("Protect me! if you can do copy-paste of this message to a notepad = NO GOOD :-(")); 
    document.close();
}
}

person adhg    schedule 16.06.2012    source источник
comment
ОК, я просто исключил печать (заменив ее на ALLOW_DEGRADED_PRINTING), и это помогло.   -  person adhg    schedule 17.06.2012
comment
Спасибо rlegendi. Вы можете опубликовать свой ответ, и я дам вам кредит! Еще раз спасибо!   -  person adhg    schedule 18.06.2012


Ответы (2)


Я не эксперт по iText и спецификации PDF, но я думаю, что вы не можете разрешить печать и отключить копирование и вставку одновременно. Вы можете найти дополнительную информацию здесь.

Альтернативным вариантом было бы поместить изображения в PDF, но OCR довольно продвинут, чтобы избежать этого.

person rlegendi    schedule 18.06.2012

Принятый ответ неверен. На самом деле вы можете отключить копирование и разрешить печать. Это очень просто, вам просто нужно отменить разрешения:

writer.setEncryption(null, null,  ~(PdfWriter.ALLOW_COPY), PdfWriter.STANDARD_ENCRYPTION_128);
person Nestor Hernandez Loli    schedule 20.04.2015