java - 获取异常-java.lang.IllegalStateException : Error: drawImage is not allowed within a text block

标签 java exception pdfbox

使用 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/

相关文章:

java - 无法使用 pdfbox 打印任何内容

java - 矩形在多边形内?

java - BIG O循环分析

java - Hibernate 5 没有 FieldHandled 类

java - 使用 try-with-resources 悄悄关闭资源

java - 确保当构造函数抛出异常时最终变量被初始化

java - 如何使用 pdfbox 2 设置复选框外观流的边框

java - 如何在java中的char数组中存储带有空格的字符串值?

java - 在 Java 中将对象转换为 Double

java - 用pdfbox分割pdf,但丢失字体