1

我制作了一个生成 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 实现这一目标。

4

1 回答 1

2

您可以加密您的PDF,以便在没有所有者密码的情况下无法修改,在您生成您的之后,使用您的输入PDF创建一个并加密 pdf,如下所示:PDFStamperPDF

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 个字母数字字符的随机字符串的哈希值。

于 2012-07-13T11:57:25.023 回答