1.pom.xml導入使用的jar包
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-pdfa</artifactId> <version>5.5.0</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency>
2.直接上代碼(數據導出為pdf文件,數據呈現樣式為自定義excel表格樣式,支持多頁展示)
public class DataToPdf { public static final String DEST = "pdf/tables.pdf"; public static void main(String[] args) throws IOException, DocumentException { File file = new File(DEST); file.getParentFile().mkdirs(); new DataToPdf().dataToPdf(DEST); } /** * 數據轉pdf * @param dest * @throws IOException * @throws DocumentException */ public void dataToPdf(String dest) throws IOException, DocumentException { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(dest)); document.open(); // 使用語言包字體 BaseFont abf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED); //字體 Font font = new Font(abf, 8); //段落 Paragraph p = new Paragraph("測試結算單", new Font(abf, 12, Font.BOLD)); p.setAlignment(Paragraph.ALIGN_CENTER); document.add(p); //表格 PdfPTable table = new PdfPTable(8);//numcolumns:列數 table.setSpacingBefore(16f);//表格與上面段落的空隙 //表格列創建並賦值 PdfPCell cell = new PdfPCell(new Phrase("單位名稱:測試有限公司", font)); cell.setHorizontalAlignment(Element.ALIGN_LEFT);//居中 cell.disableBorderSide(13);//去除左右上邊框,保留下邊框 cell.setColspan(4);//合並列數 table.addCell(cell); cell = new PdfPCell(new Phrase("日期:2020-06-05", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.disableBorderSide(13); cell.setColspan(3); table.addCell(cell); cell = new PdfPCell(new Phrase("單位(元)", font)); cell.setHorizontalAlignment(Element.ALIGN_LEFT); cell.disableBorderSide(13); cell.setColspan(1); table.addCell(cell); //首行 cell = new PdfPCell(new Phrase("期間", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setColspan(2); table.addCell(cell); cell = new PdfPCell(new Phrase("月份", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("分類", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("年利率", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("日利率", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("基數", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("利息", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("起始日:2020-03-26\n" + "結束日:2020-04-25", font)); cell.setPadding(16f); cell.setVerticalAlignment(Element.ALIGN_CENTER); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setRowspan(3); cell.setColspan(2); table.addCell(cell); cell = new PdfPCell(new Phrase("4", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("資金", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("1.10%", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("0.000031", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("10598164.91", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("325.01", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("4", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("資金", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("1.10%", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("0.000031", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("-", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("-", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("4", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("資金", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("1.10%", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("0.000031", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("-", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("-", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("合計", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setColspan(7); table.addCell(cell); cell = new PdfPCell(new Phrase("325.01", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("會計制單:", font)); cell.setHorizontalAlignment(Element.ALIGN_LEFT); cell.disableBorderSide(14); cell.setColspan(4); table.addCell(cell); cell = new PdfPCell(new Phrase("復核:", font)); cell.setHorizontalAlignment(Element.ALIGN_LEFT); cell.disableBorderSide(14); cell.setColspan(4); table.addCell(cell); table.setSpacingBefore(16f); document.add(table); //下一頁 document.newPage(); //段落 Paragraph p1 = new Paragraph("下一頁測試結算單", new Font(abf, 12, Font.BOLD)); p1.setAlignment(Paragraph.ALIGN_CENTER); document.add(p1); //表格 table = new PdfPTable(8);//numcolumns:列數 table.setSpacingBefore(16f);//表格與上面段落的空隙 //表格列創建並賦值 cell = new PdfPCell(new Phrase("單位名稱:測試有限公司", font)); cell.setHorizontalAlignment(Element.ALIGN_LEFT);//居中 cell.disableBorderSide(13);//去除左右上邊框,保留下邊框 cell.setColspan(4);//合並列數 table.addCell(cell); cell = new PdfPCell(new Phrase("日期:2020-06-05", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.disableBorderSide(13); cell.setColspan(3); table.addCell(cell); cell = new PdfPCell(new Phrase("單位(元)", font)); cell.setHorizontalAlignment(Element.ALIGN_LEFT); cell.disableBorderSide(13); cell.setColspan(1); table.addCell(cell); //首行 cell = new PdfPCell(new Phrase("期間", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setColspan(2); table.addCell(cell); cell = new PdfPCell(new Phrase("月份", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("分類", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("年利率", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("日利率", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("基數", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("利息", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("起始日:2020-04-26\n" + "結束日:2020-05-25", font)); cell.setPadding(16f); cell.setVerticalAlignment(Element.ALIGN_CENTER); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setColspan(2); table.addCell(cell); cell = new PdfPCell(new Phrase("4", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("資金", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("1.10%", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("0.000031", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("10598164.91", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("325.01", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("合計", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setColspan(7); table.addCell(cell); cell = new PdfPCell(new Phrase("325.01", font)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase("會計制單:", font)); cell.setHorizontalAlignment(Element.ALIGN_LEFT); cell.disableBorderSide(14); cell.setColspan(4); table.addCell(cell); cell = new PdfPCell(new Phrase("復核:", font)); cell.setHorizontalAlignment(Element.ALIGN_LEFT); cell.disableBorderSide(14); cell.setColspan(4); table.addCell(cell); table.setSpacingBefore(16f); document.add(table); document.close(); } }
3.上述代碼中對於IText字體設置可改:
使用iText中的字體 例:BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED); 使用Windows系統自帶的字體 例:BaseFont.createFont("C:/WINDOWS/Fonts/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); 使用外部引入的資源字體( 例:BaseFont.createFont("/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
4.上述代碼生成的表格邊框隱藏方式:
1:代表上邊框 2:代表下邊框 4:代表左邊框 8:代表右邊框 //需要隱藏那些邊框就把對應的值加起來,得到的和就是要設置的值 //比如要隱藏左右邊框 就是 4+8=12 cell.disableBorderSide(12);//左右沒了
具體例子:
//隱藏上邊框 cell.disableBorderSide(1);
//隱藏下邊框 cell.disableBorderSide(2); //隱藏上、下邊框 cell.disableBorderSide(3); //隱藏左邊框 cell.disableBorderSide(4); //隱藏左、上邊框 cell.disableBorderSide(5); //隱藏左、下邊框 cell.disableBorderSide(6); //隱藏左、上、下邊框 cell.disableBorderSide(7); //隱藏右邊框 cell.disableBorderSide(8); //隱藏右、上邊框 cell.disableBorderSide(9); //隱藏右、下邊框 cell.disableBorderSide(10); //隱藏右、上、下邊框 cell.disableBorderSide(11); //隱藏左、右邊框 cell.disableBorderSide(12);//左右沒了 //隱藏上、左、右邊框 cell.disableBorderSide(13);//只剩下 //隱藏下、左、右邊框 cell.disableBorderSide(14);//只剩上 //隱藏全部 cell.disableBorderSide(15);//全沒了
5.運行展示效果
例: