我想在pdf文件中添加图片或文字水印。我在网上找到了一些例子,但我的情况有点不同。
我有一个现有的pdf模板,该模板已经填充了动态数据并转换为byte []。生成的字节稍后会导出为pdf。
我想将水印添加到生成的字节中。 类似的东西:
byte[] addWatermark(byte[] generatedBytes){
byte[] bytesWithWatermark;
//add watermark to bytes
return bytesWithWatermark;
}
我似乎无法弄明白如何使用iText。
答案 0 :(得分:0)
您说您已经有使用iText应用水印的示例。由于您已有PDF,因此应使用向现有 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 由于您只使用了标记itext而非标记itext7,我认为您正在寻找iText 5.5.x的解决方案。但是这里应用的原理相同,即使用byte[]
作为源参数和ByteArrayOutputStream
作为目标参数,也可以让iText 7.x示例适合您的方法框架。