Java iText:添加水印后没有EOF标记

Java iText:添加水印后没有EOF标记,java,pdf,itext,Java,Pdf,Itext,我需要将水印添加到作为字节数组提供的现有pdf文件中。我使用示例作为指导,但我创建的pdf似乎缺少文件结尾标记和“startxref”关键字 有什么我没有做对的吗?还是缺少什么 PdfReader reader = new PdfReader(inputPDF); PdfStamper stamper; stamper = new PdfStamper(reader, outputPDF); PdfContentByte under = stamper.getUn

我需要将水印添加到作为字节数组提供的现有pdf文件中。我使用示例作为指导,但我创建的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();
我用工具检查了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。

多亏了Paulo Soares的提示,我找到了真正的罪魁祸首。问题中的水印代码本身是正确的,并且做了它应该做的事情。我相应地更新了问题。

多亏了保罗·索雷斯的暗示,我找到了真正的罪犯。问题中的水印代码本身是正确的,并且做了它应该做的事情。我相应地更新了问题。

看起来不错,但您没有显示如何保存文档以及保存到什么位置。例如,如果保存不正确,保存到web是出了名的容易失败。请将损坏的PDF。。。。请解释一下什么是
inputPDF
outputPDF
。谢谢Paulo,你的提示让我走上了正轨。上面的代码是正确的,并且执行它应该执行的操作。将xmlencoded带水印的pdf返回主应用程序是错误发生的地方,我忽略了我在那里犯的一个错误。它看起来不错,但您没有显示如何保存文档以及保存到什么位置。例如,如果保存不正确,保存到web是出了名的容易失败。请将损坏的PDF。。。。请解释一下什么是
inputPDF
outputPDF
。谢谢Paulo,你的提示让我走上了正轨。上面的代码是正确的,并且执行它应该执行的操作。将xmlencoded带水印的pdf返回到主应用程序是错误发生的地方,我忽略了我在那里犯的一个错误。