我已经制作了一个生成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实现这一目标。
答案 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个字母数字字符。