我需要向以字节数组形式提供的现有 pdf 文件添加水印。我用过this示例作为指导,但我创建的 pdf 似乎缺少文件结束标记和“startxref”关键字。
我有什么地方没做对吗?或者缺少什么?
PdfReader reader = new PdfReader(inputPDF);
PdfStamper stamper;
stamper = new PdfStamper(reader, outputPDF);
PdfContentByte under = stamper.getUnderContent(1);
Font f = new Font(FontFamily.HELVETICA, 15);
Phrase p = new Phrase(watermarkText, f);
ColumnText.showTextAligned(under, Element.ALIGN_CENTER, p, 297, 550, 0);
stamper.close();
reader.close();
我用this检查了pdf文件工具,这些是我得到的错误:
Open file.
0x80410108 - E - The end-of-file marker was not found.
- File: Formular_TEST_Watermark_V1_0.pdf
0x8041010A - E - The 'startxref' keyword or the xref position was not found.
- File: Formular_TEST_Watermark_V1_0.pdf
0x80410108 - E - The end-of-file marker was not found.
- File: Formular_TEST_Watermark_V1_0.pdf
Close file.
编辑:
上面的代码是正确的,当我将pdf传输回主应用程序时,我在代码中犯了一个错误,并错误地假设我在加水印时一定犯了错误,因为我已经成功传输了多次pdf,并且认为我不会在那里犯错误。我的错。
为了完整起见,inputPDF和outputPDF是ByteArrayInputStream和ByteArrayInputStream。
最佳答案
多亏保罗·苏亚雷斯的提示,我找到了真正的罪魁祸首。问题中水印本身的代码是正确的并且执行了它应该执行的操作。我相应地更新了问题。
关于Java iText : No EOF marker after adding watermark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38614660/