为 pdf 添加水印 java iText

Add watermark to pdf java iText

我想给 pdf 文件添加图片或文字水印。我在网上找到了一些例子,但我的情况有点不同。

我有一个现有的 pdf 模板,它已经填充了动态数据并转换为 byte[]。生成的字节稍后导出为 pdf。

我想将水印添加到生成的字节中。 类似于:

byte[] addWatermark(byte[] generatedBytes){
  byte[] bytesWithWatermark;

  //add watermark to bytes

  return bytesWithWatermark;
}

我似乎无法弄清楚如何使用 iText 执行此操作。

您说您已经有了使用 iText 应用水印的示例。由于您已有 PDF,因此您应该使用示例中的代码将水印添加到 existing PDF。这应该是一个使用 PdfReader / PdfStamper 对的示例,例如那些here,都具有结构

PdfReader reader = new PdfReader(SOME_SOURCE);
PdfStamper stamper = new PdfStamper(reader, SOME_TARGET_STREAM);
[... add watermark to all pages in stamper ...]
stamper.close();
reader.close();

要使这些示例适合您的 addWatermark 方法,只需使用 byte[] 代替 SOME_SOURCE 并使用 ByteArrayOutputStream 代替 SOME_TARGET_STREAM

byte[] addWatermark(byte[] generatedBytes) {
    try (ByteArrayOutputStream target  = new ByteArrayOutputStream()) {
        PdfReader reader = new PdfReader(generatedBytes);
        PdfStamper stamper = new PdfStamper(reader, target);
        [... add watermark to all pages in stamper ...]
        stamper.close();
        reader.close();
        return target.toByteArray();
    }
}

PS 由于您只使用了标签 and not the tag ,我假设您正在寻找 iText 5.5.x 的解决方案。但是这里应用的相同原则,即使用 byte[] 作为源参数和 ByteArrayOutputStream 作为目标参数,也将允许您使 iText 7.x 示例适合您的方法框架。