你知道的越多,你不知道的越多
點贊再看,養成習慣
如果您有疑問或者見解,歡迎指教:
企鵝:869192208
文章目錄
- 前言
- 生成表格 PDF 效果
- 引入 pom 配置
- 代碼實現
- 定義 CreateExcelToPdfModel 對象
- 主方法
前言
最近遇到生成 Excel 并轉 PDF 的需求,磕磕碰碰總結三種方式,分別是 POI + iText 庫,EasyExcel + iText 庫和直接生成 PDF 表格三種方式。
本文基于 iText 庫實現,直接生成表格的 PDF 文件。
生成表格 PDF 效果
引入 pom 配置
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version>
</dependency>
代碼實現
定義 CreateExcelToPdfModel 對象
import lombok.Data;
import java.util.List;/*** <h2>生成excel表格型的pdf入參</h2>* @author chendw* @date 2024-02-25 10:12:51**/
@Data
public class CreateExcelToPdfModel {//表頭數據private List<List<String>> head;//表的內容數據private List<List<String>> dataList;//PDF表頭標題private String sheetName;}
主方法
import lombok.extern.slf4j.Slf4j;@Slf4j
public class TablePdfUtil {public static void createTablePdf(CreateExcelToPdfModel createExcelToPdfModel, String pdfFilePath) {try (FileOutputStream fos = new FileOutputStream(pdfFilePath)) {List<List<String>> headList = createExcelToPdfModel.getHead();List<List<String>> dataList = createExcelToPdfModel.getDataList();// 創建PDF文檔對象Document document = new Document(PageSize.A2, 50, 50, 50, 50);// 創建PDF輸出流PdfWriter writer = PdfWriter.getInstance(document, fos);// 打開PDF文檔document.open();// 創建PDF表格對象PdfPTable table = new PdfPTable(headList.size());table.setHeaderRows(1);// 設置表格寬度table.setWidthPercentage(100);// 設置表格標題String sheetName = createExcelToPdfModel.getSheetName();Paragraph title = new Paragraph(sheetName, new Font(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), 16, Font.BOLD));title.setAlignment(Element.ALIGN_CENTER);document.add(title);// 添加表格標題for (List<String> head : headList) {String value = head.get(0);PdfPCell pdfCell = new PdfPCell(new Paragraph(value, new Font(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), 12)));pdfCell.setBorderWidth(1f);pdfCell.setBorderColor(BaseColor.BLACK);pdfCell.setPadding(5f);pdfCell.setBackgroundColor(BaseColor.LIGHT_GRAY);table.addCell(pdfCell);}// 添加表格內容for (List<String> data : dataList) {for (String s : data){PdfPCell pdfCell = new PdfPCell(new Paragraph(s, new Font(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), 12)));pdfCell.setBorderWidth(1f);pdfCell.setBorderColor(BaseColor.BLACK);pdfCell.setPadding(5f);table.addCell(pdfCell);}}// 添加表格到PDF文檔table.setSpacingBefore(20f);table.setSpacingAfter(20f);table.setKeepTogether(true);document.add(table);// 關閉PDF文檔document.close();} catch (Exception e) {log.error("生成表格pdf失敗:{}", e.getMessage(), e);}}
}
至此,就基于 iText 庫直接實現了表格 PDF 的邏輯。