try (PDDocument document = new PDDocument()) {
    PDPage page = new PDPage();
    document.addPage(page);

    PDImageXObject pdImage = PDImageXObject.createFromFile("pdf/dzs.jpeg", document);

    try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
        contentStream.beginText();
        contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
        contentStream.newLineAtOffset(100, 700);
        contentStream.showText("Hello PDFBox");

        contentStream.drawImage(pdImage, 100, 400, pdImage.getWidth() * 0.25f, pdImage.getHeight() * 0.25f);

        contentStream.endText();
    } catch (IOException e) {
        e.printStackTrace();
    }

    document.save("pdf/example.pdf");
} catch (IOException e) {
    e.printStackTrace();
}
  • 在 Java 开发中,使用 PDFBox 库处理 PDF 文件时,出现如下错误信息
Exception in thread "main" java.lang.IllegalStateException: Error: drawImage is not allowed within a text block.
问题原因
  1. 这个错误发生在调用 beginText 方法之后,未调用 endText 方法,就调用了 drawImage 方法

  2. 在调用 beginText 方法之后与调用 endText 方法之前,只能进行文本操作,否则报错

处理策略
  • 确保在调用 beginText 方法之后与调用 endText 方法之前,只能进行文本操作,其他操作在调用 beginText 方法之前或调用 endText 方法之后进行
try (PDDocument document = new PDDocument()) {
    PDPage page = new PDPage();
    document.addPage(page);

    PDImageXObject pdImage = PDImageXObject.createFromFile("pdf/dzs.jpeg", document);

    try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
        contentStream.beginText();
        contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
        contentStream.newLineAtOffset(100, 700);
        contentStream.showText("Hello PDFBox");
        contentStream.endText();

        contentStream.drawImage(pdImage, 100, 400, pdImage.getWidth() * 0.25f, pdImage.getHeight() * 0.25f);
    } catch (IOException e) {
        e.printStackTrace();
    }

    document.save("pdf/example.pdf");
} catch (IOException e) {
    e.printStackTrace();
}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐