itext是java的一个合成PDF库,最近接触生成PDF相关的功能,一开始用生成图片再合成PDF的方式做,但发现性能不佳,并且排版非常麻烦,PDF种的文字也无法选中。
网上查了一番,发现有itext可用,于是拿出来试一番。2.1.7版本之后需要购买许可证才能商用,简单试用了下。
maven
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
最新版的是IText 7 Core,但相对说5.x的相关教程比较多,只是简单使用于是就用了5.5.10的版本进行。
步骤
最基本的有5个步骤,如下:
// 创建文档
Document document = new Document();
// 关联书写器
PdfWriter.getInstance(document, new FileOutputStream("createSamplePDF.pdf"));
// 打开文档
document.open();
// 写入内容
document.add(new Paragraph("Hello World"));
// 关闭文档
document.close();
给PdfPTable最外层套上边框
table默认是不能直接设置边框的,只能给表格里的单元格设置边框。所以需要用到表格事件来完成,在绘制结束的时候触发事件绘制边框。
/**
* 表格边框事件
*/
class BorderEvent implements PdfPTableEvent {
@Override
public void tableLayout(PdfPTable table, float[][] widths,
float[] heights, int headerRows, int rowStart,
PdfContentByte[] canvases) {
float width[] = widths[0];
float x1 = width[0];
float x2 = width[width.length - 1];
float y1 = heights[0];
float y2 = heights[heights.length - 1];
PdfContentByte cb = canvases[PdfPTable.LINECANVAS];
cb.rectangle(x1, y1, x2 - x1, y2 - y1);
cb.stroke();
cb.resetRGBColorStroke();
}
}
使用:
PdfPTable table = new PdfPTable(1);
table.setTotalWidth(350);
table.setLockedWidth(true);
table.setTableEvent(new BorderEvent());
本文由 visionki 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Mar 17, 2021 at 06:34 am