1、引入依赖(最后一个支持java8的版本)
-
com.github.librepdf -
openpdf -
1.3.34 -
com.github.librepdf -
openpdf-fonts-extra -
1.3.34
2、编码
- String outputPath = "d:\\pdf" + File.separator;
- File file = new File(outputPath);
- if (!file.exists()) {
- file.mkdir();
- }
- outputPath = outputPath + "hello.pdf";
-
- FileOutputStream fileOutputStream = new FileOutputStream(outputPath);
-
- // 设置字体
- BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
- Font titleFont = new Font(bfChinese, 13, Font.BOLD, Color.BLACK);
- Font docFont = new Font(bfChinese, 10, Font.UNDEFINED, Color.BLACK);
-
- Document document = new Document(PageSize.A4);
- PdfWriter.getInstance(document, fileOutputStream);
- document.open();
-
- // 初始化一个4列的表格,超过自动换行
- PdfPTable table = new PdfPTable(4);
- table.setWidthPercentage(100f);
- table.setSpacingAfter(20f);
-
- Paragraph paragraph = new Paragraph("检查表名称", titleFont);
- PdfPCell cell = new PdfPCell(paragraph);
- cell.setFixedHeight(20F);
- cell.setHorizontalAlignment(Element.ALIGN_CENTER); // 设置内容水平居中显示
- cell.setVerticalAlignment(Element.ALIGN_CENTER); // 设置垂直对齐
- cell.setColspan(4);
- table.addCell(cell);
-
- paragraph = new Paragraph("检查人", docFont);
- cell = new PdfPCell(paragraph);
- cell.setFixedHeight(20F);
- cell.setHorizontalAlignment(Element.ALIGN_CENTER); // 设置内容水平居中显示
- cell.setVerticalAlignment(Element.ALIGN_CENTER); // 设置垂直对齐
- table.addCell(cell);
-
- cell = new PdfPCell(new Paragraph(taskResp.getOrgUserName(), docFont));
- cell.setFixedHeight(20F);
- cell.setHorizontalAlignment(Element.ALIGN_CENTER); // 设置内容水平居中显示
- cell.setVerticalAlignment(Element.ALIGN_CENTER); // 设置垂直对齐
- table.addCell(cell);
-
- cell = new PdfPCell(new Paragraph("检查时间", docFont));
- cell.setFixedHeight(20F);
- cell.setHorizontalAlignment(Element.ALIGN_CENTER); // 设置内容水平居中显示
- cell.setVerticalAlignment(Element.ALIGN_CENTER); // 设置垂直对齐
- table.addCell(cell);
-
- cell = new PdfPCell(new Paragraph(TimeUtil.get_yyyyMMddHHmmss(taskResp.getCompleteTime()), docFont));
- cell.setFixedHeight(20F);
- cell.setHorizontalAlignment(Element.ALIGN_CENTER); // 设置内容水平居中显示
- cell.setVerticalAlignment(Element.ALIGN_CENTER); // 设置垂直对齐
- table.addCell(cell);
-
-
- cell = new PdfPCell(new Paragraph("检查事项", docFont));
- cell.setFixedHeight(20F);
- cell.setHorizontalAlignment(Element.ALIGN_CENTER); // 设置内容水平居中显示
- cell.setVerticalAlignment(Element.ALIGN_CENTER); // 设置垂直对齐
- table.addCell(cell);
-
- cell = new PdfPCell(new Paragraph("检查内容", docFont));
- cell.setFixedHeight(20F);
- cell.setColspan(2);
- cell.setHorizontalAlignment(Element.ALIGN_CENTER); // 设置内容水平居中显示
- cell.setVerticalAlignment(Element.ALIGN_CENTER); // 设置垂直对齐
- table.addCell(cell);
-
- cell = new PdfPCell(new Paragraph("检查意见", docFont));
- cell.setFixedHeight(20F);
- cell.setHorizontalAlignment(Element.ALIGN_CENTER); // 设置内容水平居中显示
- cell.setVerticalAlignment(Element.ALIGN_CENTER); // 设置垂直对齐
- table.addCell(cell);
-
- // 循环处理数据,可删除
- for (InspectItemMoldResp inspectItemMoldResp : inspectItemResp.getMoldList()) {
- for (int i = 0; i < inspectItemMoldResp.getPatternList().size(); i++) {
- if (i == 0) {
- cell = new PdfPCell(new Paragraph(inspectItemMoldResp.getName(), docFont));
- // cell.setFixedHeight(inspectItemMoldResp.getPatternList().size() * 20F);
- cell.setRowspan(inspectItemMoldResp.getPatternList().size());
- cell.setHorizontalAlignment(Element.ALIGN_CENTER); // 设置内容水平居中显示
- cell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 设置居中对齐
- table.addCell(cell);
-
- cell = new PdfPCell(new Paragraph(inspectItemMoldResp.getPatternList().get(i).getName(), docFont));
- cell.setFixedHeight(20F);
- cell.setHorizontalAlignment(Element.ALIGN_LEFT);
- cell.setColspan(2);
- table.addCell(cell);
-
- cell = new PdfPCell(new Paragraph(
- StringUtils.join(inspectItemMoldResp.getPatternList().get(i).getDeployList()
- .stream().filter(f -> EnumDict.Judge.YES.getKey() == f.getOptionStatus())
- .map(InspectItemDeployResp::getName).collect(Collectors.toList()), ","), docFont));
- cell.setFixedHeight(20F);
- cell.setHorizontalAlignment(Element.ALIGN_LEFT);
- table.addCell(cell);
-
- } else {
- cell = new PdfPCell(new Paragraph(inspectItemMoldResp.getPatternList().get(i).getName(), docFont));
- cell.setFixedHeight(20F);
- cell.setHorizontalAlignment(Element.ALIGN_LEFT);
- cell.setColspan(2);
- table.addCell(cell);
-
- cell = new PdfPCell(new Paragraph(
- StringUtils.join(inspectItemMoldResp.getPatternList().get(i).getDeployList()
- .stream().filter(f -> EnumDict.Judge.YES.getKey() == f.getOptionStatus())
- .map(InspectItemDeployResp::getName).collect(Collectors.toList()), ","), docFont));
- cell.setFixedHeight(20F);
- cell.setHorizontalAlignment(Element.ALIGN_LEFT);
- table.addCell(cell);
- }
- }
- }
-
- document.add(table);
- document.close();// 关闭文档
- fileOutputStream.flush();
- fileOutputStream.close();