我已经制作了一个生成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实现此目的。

最佳答案

您可以对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();


另外,我建议您不要使用硬编码的所有者密码;由于生成文件后不需要所有者密码,因此建议将其设置为由20个字母数字字符组成的随机字符串的SHA哈希。

09-27 21:13