java使用IText將數據導出為pdf文件(數據為excel表格樣式)


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.運行展示效果

 

 

 例:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM