如何使用Apache PDFBox创建表

我们计划将我们的pdf生成实用程序从iText迁移到PDFBox(由于iText中的许可问题)。 通过一些努力,我能够编写和定位文本,绘制线条等。但创建表格中嵌入文本的表格是一个挑战,我通过文档,示例,谷歌,Stackoverflow找不到一个东西。 想知道PDFBox是否为创建带有嵌入文本的表提供本机支持。 我的最后一招是使用此链接https://github.com/eduardohl/Paginated-PDFBox-Table-Sample

感谢Tilman提供的链接。 使用盒装API( https://github.com/dhorions/boxable ),我能够创建我想要的表格。 仅仅是一个FYI我想创建具有可变数量的单元格的表。 例如,第1行将具有2个单元,第2行可以具有5个单元,第3行可以仅具有3个单元。 我能够轻松地做到。 我在上面提到的链接中遵循了Example1.java。

由于我还需要一个侧面项目的表绘图function,我自己实现了一个小的“桌面抽屉”库,我现在上传到github 。

为了制作这样一张桌子 – 例如 – …… 在此处输入图像描述

…你需要以下代码:

// Define the table structure first TableBuilder tableBuilder = new TableBuilder() .addColumnOfWidth(300) .addColumnOfWidth(120) .addColumnOfWidth(70) .setFontSize(8) .setFont(PDType1Font.HELVETICA); // Header ... tableBuilder.addRow(new RowBuilder() .add(Cell.withText("This is right aligned without a border").setHorizontalAlignment(RIGHT)) .add(Cell.withText("And this is another cell")) .add(Cell.withText("Sum").setBackgroundColor(Color.ORANGE)) .setBackgroundColor(Color.BLUE) .build()); // ... and some 10 rows with alternating background color for (int i = 0; i < 10; i++) { tableBuilder.addRow(new RowBuilder() .add(Cell.withText(i).withAllBorders()) .add(Cell.withText(i * i).withAllBorders()) .add(Cell.withText(i + (i * i)).withAllBorders()) .setBackgroundColor(i % 2 == 0 ? Color.LIGHT_GRAY : Color.WHITE) .build()); } // ... // Draw! (new TableDrawer(contentStream, tableBuilder.build(), startX, startY)).draw(); 

当前的“function列表”包括:

  • 在表级别设置字体和字体大小
  • 定义单个单元格,分别具有底部,顶部,左侧和右侧边框宽度
  • 在行或单元级别定义背景颜色
  • 在单元级别定义填充(顶部,底部,左侧,右侧)
  • 定义边框颜色(在表格,行或单元格级别)
  • 指定文本对齐方式(右侧或左侧,中心尚未实现)

此外,如果需要,添加缺失的内容(如居中文本或在顶部,底部,左侧和右侧边框上具有不同的边框颜色)应该不会太难。 但是,正如已经说过的,这只是一个非常小的库,我主要是为自己的另一个项目编写的。