Java iText 生成PDF表格

时间:2021-08-03 22:20:47

近期项目需要将计算结果(二维表格)导出为PDF,所需jar包:

Java iText 生成PDF表格

然后新建PDF文档:

// 创建Document对象(页面的大小为A4,左、右、上、下的页边距为10)
Document document = new Document(PageSize.A4, 10, 10, 10, 10);
// 建立书写器
PdfWriter.getInstance(document, new FileOutputStream("F:\\test.pdf"));
// 打开文档
document.open();
// 使用iTextAsian.jar中的字体
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont);

Table table = PDFTest.setTable(source1,source2,receiver,json); //表格设计
document.add(table);

// 关闭文档
document.close();
其中字体及表格单元的设置可参考:

/**
* 设置字体编码格式
* @return
*/
public static Font setFont(){
BaseFont baseFont = null;
try {
baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Font font = new Font(baseFont, 8, Font.NORMAL,Color.BLUE);
return font;
}
/**
* 设置cell
* @param name
* @return
* @throws BadElementException
*/
public static Cell setTableHeader(String name) throws BadElementException{

Cell cell = new Cell(new Phrase(name,PDFTest.setFont()));
//单元格水平对齐方式
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//单元格垂直对齐方式
cell.setVerticalAlignment(Element.ALIGN_CENTER);
// cell.setHeader(true);
//cell.setBackgroundColor(Color.RED);
return cell;
}

表格设置:

public static Table setTable(List<String> source1,List<String> source2,List<String> receiver,JSONObject json) throws BadElementException{

Table table = new Table(2+source1.size()+source2.size());//参数为表格的列数
table.setBorderWidth(1);
// 创建表头
Cell cell = PDFTest.setTableHeader("");
cell.setColspan(2);//合并列
cell.setRowspan(2);//合并行
table.addCell(cell);
Cell cell2 = PDFTest.setTableHeader("场景1");
cell2.setColspan(source1.size());
table.addCell(cell2);
Cell cell3 = PDFTest.setTableHeader("场景2");
cell3.setColspan(source2.size());
table.addCell(cell3);

for(int i=0;i<source1.size();i++){
Cell cell4 = PDFTest.setTableHeader(source1.get(i));
table.addCell(cell4);
}
for(int i=0;i<source2.size();i++){
Cell cell4 = PDFTest.setTableHeader(source2.get(i));
table.addCell(cell4);
}

for(int i=0;i<receiver.size()*2;i=i+2){
Cell cell5 = PDFTest.setTableHeader(receiver.get(i/2));
cell5.setRowspan(2);
table.addCell(cell5);

Cell cell7 = PDFTest.setTableHeader("昼间");
table.addCell(cell7);

JSONArray array = (JSONArray) json.get(i+"");
for(int j=0;j<array.size();j++){
Cell cell6 = PDFTest.setTableHeader(array.getString(j));
table.addCell(cell6);
}

Cell cell8 = PDFTest.setTableHeader("夜间");
table.addCell(cell8);

JSONArray array2 = (JSONArray) json.get(i+1+"");
for(int j=0;j<array2.size();j++){
Cell cell6 = PDFTest.setTableHeader(array2.getString(j));
table.addCell(cell6);
}

}
return table;

}

然后,便可得自定义可变表头含表格的PDF文件。

可参考博客:(扩展学习)

1.点击打开链接

2.java使用iText生成pdf表格

3.Java导出pdf表格

4.Java iText导出pdf功能实现

5.java动态生成pdf含表格table和 合并两个pdf文件功能

6.使用iText在word文档中插入复杂的表格

7.利用itext操作pdf从数据库导出大量数据--功能汇总(一)

8.java 如何在pdf中生成表格

9. java根据模板生成pdf文件并导出