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

使用Apache PDFBox结合Boxable实现占页宽50%-60%的表格居中问题

实现方法

Boxable库的表格本身没有内置对齐属性,你可以通过手动计算绘制起始坐标的方式实现居中效果,操作逻辑如下:

  • 首先计算页面的有效可绘制宽度:取页面总宽度减去左右边距的数值
  • 按照你需要的页面占比(50%~60%)算出表格总宽度
  • 用「(页面有效宽度 - 表格总宽度)/2 + 左边距」得到表格居中的X轴起始坐标
  • 初始化表格时将上述计算得到的X坐标传入即可

代码示例

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import be.quodlibet.boxable.BaseTable;

public class CenteredTableDemo {
    public static void main(String[] args) throws Exception {
        // 初始化PDF基础对象
        PDDocument document = new PDDocument();
        PDPage page = new PDPage(PDRectangle.A4);
        document.addPage(page);
        PDPageContentStream contentStream = new PDPageContentStream(document, page);

        // 配置基础参数
        float pageMargin = 50f;
        float tableWidthRatio = 0.55f; // 表格占页面有效宽度的比例,可在0.5~0.6之间调整
        float pageTotalWidth = page.getMediaBox().getWidth();
        float pageEffectiveWidth = pageTotalWidth - 2 * pageMargin;
        float tableTotalWidth = pageEffectiveWidth * tableWidthRatio;
        
        // 计算表格居中的起始X坐标
        float tableStartX = pageMargin + (pageEffectiveWidth - tableTotalWidth) / 2;
        float tableStartY = page.getMediaBox().getHeight() - pageMargin;

        // 初始化表格时传入计算得到的startX和tableTotalWidth
        BaseTable table = new BaseTable(tableStartY, tableStartY, pageMargin, tableTotalWidth, pageMargin, document, page, true, true);
        
        // 后续正常添加行、设置单元格样式、填充内容即可
        // ... 你的表格内容填充逻辑

        table.draw();
        contentStream.close();
        document.save("centered_table_demo.pdf");
        document.close();
    }
}

如果你的表格存在多页分页的场景,分页后新页面的续表也使用相同的tableStartX参数初始化,即可保证所有页面的表格都保持居中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:06:07