You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache PDFBox生成PDF时新增页面无法显示数据行问题

问题原因与修复方案

问题出在新建页面后未重新创建对应的PDPageContentStream,原有的contentStream始终关联第一页,所有后续绘制操作都只会在第一页 common薛(于六十九3追Currentaccstore而非oko(SampleDataGenerator.generateSampleData().getJsonObject("data").getJsonArray("transactionList");执行,导致新页面无数据。

修复步骤

  • 每次新增页面时,先关闭旧的contentStream(防止资源泄漏)
  • 基于新创建的页面初始化新的contentStream
  • 调整contentStream的作用域,确保循环中能正确更新

修改后的代码示例

float dataXPosition = 10f;
float dataYPosition = 560f;
float margin = 100f;
float rowHeight = 20f;
// 初始化contentStream,关联第一页
PDPageContentStream contentStream = new PDPageContentStream(document, page);

JsonArray transactionList = SampleDataGenerator.generateSampleData().getJsonObject("data").getJsonArray("transactionList");

for (int i = 0; i < transactionList.size(); i++) {
    JsonObject transaction = transactionList.getJsonObject(i);

    if (dataYPosition - rowHeight < margin) {
        // 关闭旧的contentStream
        contentStream.close();
        // 创建新页面并添加到文档
        page = new PDPage();
        document.addPage(page);
        // 基于新页面初始化新的contentStream
        contentStream = new PDPageContentStream(document, page);
        // 重置Y坐标到新页面的起始位置
        dataYPosition = page.getMediaBox().getHeight() - margin;
    }

    List<String> transactionValues = generateTransactionRow.doGenerateRow(transaction);

    for (String dataValues: transactionValues) {
        contentStream.beginText();
        contentStream.setFont(HELVETICA, 6.5f);
        contentStream.newLineAtOffset(dataXPosition, dataYPosition);
        contentStream.showText(dataValues);
        contentStream.endText();
        dataXPosition += 100;
    }

    dataXPosition -= 600;
    dataYPosition -= rowHeight;
}
// 循环结束后关闭最后一个contentStream
contentStream.close();

关键改动说明

  1. 初始化时创建第一页的contentStream,循环内新增页面时先关闭旧流,再创建新流关联新页面
  2. 循环结束后务必关闭最后一个contentStream,确保所有内容都写入PDF
  3. 保留原有坐标重置逻辑,保证新页面从正确位置开始绘制

内容的提问来源于stack exchange,提问作者Plus Ultra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 14:37:55