近期项目需要将计算结果(二维表格)导出为PDF,所需jar包:
然后新建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.点击打开链接
5.java动态生成pdf含表格table和 合并两个pdf文件功能
7.利用itext操作pdf从数据库导出大量数据--功能汇总(一)