使用 DrawImage() 方法将图像添加到每个页面上现有的 PDF 文件(PDFBox api)以实现它时出现错误,但出现异常
java.lang.IllegalStateException: Error: drawImage is not allowed within a text block.
Method: contents.drawImage(ximage,80,80);
我不确定现有的 PDF 文件,它可能在每个页面上包含数据或图像。我想在每个页面上添加小图像。与现有数据重叠没关系。
org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject ximage = null;
org.apache.pdfbox.rendering.PDFRenderer pdfRenderer =
new org.apache.pdfbox.rendering.PDFRenderer(doc1);
for(int c=0; c<=doc1.getNumberOfPages()-1;c++){
java.awt.image.BufferedImage bim =
pdfRenderer.renderImageWithDPI(c, 300,
org.apache.pdfbox.rendering.ImageType.RGB);
ximage = org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory.createFromImage(doc1, bim);
}
for (i = 0; i <= pageCount - 1; i++) {
// get all pages
PDPage = pd1.getDocumentCatalog().getPages().get(i);
org.apache.pdfbox.pdmodel.PDPageContentStream contents = new org.apache.pdfbox.pdmodel.PDPageContentStream(pd1, PDPage, org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode.APPEND, true);
//Begin the Content stream
contents.beginText();
contents.setFont(font, fontSize);
contents.setLeading(14.5 f);
contents.newLine();
contents.drawImage(ximage, 80, 80);
// contents.drawInlineImage(ximage,400,400);
contents.endText();
contents.close();
}
希望图像出现在 PDF 的每一页上。请建议在 PDF 页面上放置图像的最佳方式。
最佳答案
异常文本“drawImage is not allowed inside a text block”告诉它:“beginText()”和“endText()”创建一个文本 block 。所以移动“contents.endText();”在“drawImage”之前。 (顺便说一句,你没有显示任何文字?!)
额外提示:向“PDPageContentStream”构造函数添加第五个“true”参数。这将防止某些 PDF 出现奇怪的效果(请参阅 javadoc)。
关于java - 获取异常-java.lang.IllegalStateException : Error: drawImage is not allowed within a text block,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57810312/