我已经制作了一个生成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
哈希。