使用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
相关产品推荐
相关产品推荐

