【发布时间】:2015-09-01 16:20:32
【问题描述】:
pdf 以字节[] 的形式存储在数据库中。我想在 pdf 中添加水印并将加盖文件作为字节 [] 存储在数据库中。这是一个 Grails 应用程序,所以代码在 Groovy 中。这里是:
def stampDocument(byte[] orig) {
PdfReader pdfReader = new PdfReader(orig)
ByteArrayOutputStream baos = new ByteArrayOutputStream()
//baos.write(orig, 0, orig.size())
PdfStamper pdfStamper = new PdfStamper(pdfReader, baos)
com.itextpdf.text.Image image = com.itextpdf.text.Image.getInstance(new URL("http://localhost:8080/IDSG/assets/stamp.jpg"));
image.setAbsolutePosition(65f, 10f);
image.scalePercent(40f);
int i = 1
while(i <= pdfReader.getNumberOfPages()){
PdfContentByte content = pdfStamper.getUnderContent(i)
content.addImage(image)
i++
}
return baos.toByteArray()
}
问题在于 pdfStamper 似乎没有注意到 pdfReader。在 pdfReader 上调用一些方法(getFileLength() 和 getInfo())返回有效数据,所以 pdfReader 似乎没问题。与图片相同。
如果注释代码(baos.write(orig, 0, orig.size()) 未注释,则原始文件保存为加盖文件,但没有水印。它比原始文件大一点,但渲染完美.
将上面提到的代码注释掉,就像代码示例中一样,返回的 byte[] 比原始文件小得多,并且不是有效的 pdf 文件。
这适用于磁盘上的文件。但我被难住了。似乎只需要一些小东西。任何帮助将不胜感激。我已经为此奋斗了几个小时并在网上搜索。
【问题讨论】:
标签: pdf grails groovy itext bytearrayoutputstream