保护从iTextPdf生成的PDF

时间:2012-07-13 11:35:09

标签: java pdf itext watermark

我已经制作了一个生成pdf作为其功能部分的软件,我使用iTextPDF Java库来生成PDF。对于我的软件的演示版本,我使用以下代码添加了文本水印(如“演示软件”)

PdfContentByte under = writer.getDirectContentUnder(); BaseFont baseFont = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED); under.beginText(); under.setColorFill(BaseColor.RED); under.setFontAndSize(baseFont, 25); under.showTextAligned(PdfContentByte.ALIGN_CENTER," demo software",250, 470,55); under.endText();

之后,我使用PDF转换为Word转换器将其转换为.docx格式,生成的docx文件不包含水印,内容也很容易编辑,因此,演示软件的唯一目的就是消失。

如何实现永久水印,以便pdf到word转换器无法将其删除。

我想到的一个想法是,不应该将文本放在pdf中,而应该有一种方法将页面的所有文本首先转换为图像,然后将pdf包含在那些图像中。但我不确定如何使用iTextPdf实现这一目标。

1 个答案:

答案 0 :(得分:2)

您可以加密PDF以便在没有所有者密码的情况下对其进行修改,在生成PDF后,使用PDFStamper创建PDF作为输入 并加密pdf,如下所示:

final PdfReader reader = new PdfReader(your_input_stream);
final PdfStamper stamper = new PdfStamper(reader, your_output_stream);

stamper.setEncryption(PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA,
        "your_user_password", "your_owner_password", PdfWriter.ALLOW_PRINTING);

stamper.close();

作为附注,我建议不要使用硬编码的所有者密码;因为在生成文件后你不需要所有者密码,我建议把它作为一个随机字符串的SHA散列,比如20个字母数字字符。