亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot集成iTextPDF的實例

 更新時間:2024年09月20日 10:43:07   作者:kicinio  
SpringBoot集成iTextPDF時,創(chuàng)建PDF文檔涉及Document、PdfPTable和PdfPCell對象,設置文檔大小和頁邊距,使用Paragraph設置段落樣式,并通過Table和Cell控制表格樣式和對齊,還可加入圖片美化文檔,這些步驟對于生成具有中文內(nèi)容的PDF文件至關重要

SpringBoot集成iTextPDF

依賴

        <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext</artifactId>
            <version>4.2.2</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

注意:不加下面這個依賴無法設置中文

使用步驟

  1. 先創(chuàng)建Document對象,該對象是PDF文檔,可以進行一些屬性設置
  2. PdfPTable是表格對象,用于表格對象的創(chuàng)建、管理及使用
  3. PdfPCell是具體的表格子項了,里面就是我們要操作寫入的對象
  4. PdfPCell對象加入到PdfPTable對象中,PdfPTable對象再加入到Document對象中,便完成了文檔的創(chuàng)建

基本屬性

文檔大小:

由Document對象的多個重載構造器決定。

Document(); // 默認頁面大小是A4
Document(PageSize.A4); // 指定頁面大小為A4
Document(PageSize.A4,50,50,30,20); // 指定頁面大小為A4,且自定義頁邊距(marginLeft、marginRight、marginTop、marginBottom)

段落的設置:

由Paragraph的對象屬性決定。

Paragraph paragraph = new Paragraph(name,headfont);//設置字體樣式
paragraph.setAlignment(1);//設置文字居中 0靠左 1,居中 2,靠右
paragraph.setIndentationLeft(12);// 左縮進
paragraph.setIndentationRight(12);// 右縮進
paragraph.setFirstLineIndent(24);// 首行縮進
paragraph.setLeading(20f); //行間距
paragraph.setSpacingBefore(5f); //設置段落上空白
paragraph.setSpacingAfter(10f); //設置段落下空白

表格:

由Table的對象屬性決定。

table.setAlignment(Element.ALIGN_CENTER);//居中
table.setAutoFillEmptyCells(true);//自動填滿
table.setBorderWidth((float)0.1);//表格邊框線條寬度
table.setPadding(1);//邊距:單元格的邊線與單元格內(nèi)容的邊距
table.setSpacing(0);//間距:單元格與單元格之間的距離

cell:

由Cell的對象屬性決定。

cell.setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中
cell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中

代碼

    @RequestMapping(value = "ef/pdf")
    public void pdfController() throws IOException, DocumentException {
        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
        response.setHeader("content-Type", "application/pdf");
        // 下載文件的默認名稱
        response.setHeader("Content-Disposition", "attachment;filename=test.pdf");

        Document document = new Document();
        try {
            PdfWriter.getInstance(document, response.getOutputStream());
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        document.open();
        document.setPageCount(2);
        document.addTitle("Personal Grade Browser");// 標題
        document.addAuthor("Jack.Edward");// 作者
        document.addSubject("Personal Grade of Jack.Edward");// 主題
        document.addKeywords("Simulator");// 關鍵字
        document.addCreator("Kicinio");// 創(chuàng)建者

        Image image =Image.getInstance("/xp.png");

        List<String> titleList = new ArrayList<>();
        titleList.add("Literature");
        titleList.add("Math");
        titleList.add("English");

        for(int i = 0; i < 10; i++){
            PdfPTable tableContent = new PdfPTable(titleList.size());
            if(i == 0){
                PdfPTable tableTitle = new PdfPTable(titleList.size());
                PdfPCell cellOne = new PdfPCell();
                cellOne.setPhrase(new Paragraph(titleList.get(0)));
                cellOne.setBackgroundColor(BaseColor.LIGHT_GRAY);
                cellOne.setHorizontalAlignment(Element.ALIGN_CENTER);
                tableTitle.addCell(cellOne);

                PdfPCell cellTwo = new PdfPCell();
                cellTwo.setPhrase(new Paragraph(titleList.get(1)));
                cellTwo.setBackgroundColor(BaseColor.LIGHT_GRAY);
                cellTwo.setHorizontalAlignment(Element.ALIGN_CENTER);
                tableTitle.addCell(cellTwo);

                PdfPCell cellThree = new PdfPCell();
                cellThree.setPhrase(new Paragraph(titleList.get(2)));
                cellThree.setBackgroundColor(BaseColor.LIGHT_GRAY);
                cellTwo.setHorizontalAlignment(Element.ALIGN_CENTER);
                tableTitle.addCell(cellThree);

                document.add(tableTitle);
            }
            Random randomGrade = new Random();
            PdfPCell cell = new PdfPCell();
            cell = new PdfPCell();
            cell.setPhrase(new Paragraph(String.valueOf(randomGrade.nextInt(100))));
            tableContent.addCell(cell);
            document.add(tableContent);

            cell = new PdfPCell();
            cell.setPhrase(new Paragraph(String.valueOf(randomGrade.nextInt(100))));
            tableContent.addCell(cell);
            cell.setBorderWidth(20);
            document.add(tableContent);

            cell = new PdfPCell();
            cell.setPhrase(new Paragraph(String.valueOf(randomGrade.nextInt(100))));
    //        cell.setImage(image);
            tableContent.addCell(cell);
            document.add(tableContent);

        }
        document.close();
    }

效果

  • 加上圖片之后:

有興趣的讀者可自行美化

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 教你怎么用idea創(chuàng)建web項目

    教你怎么用idea創(chuàng)建web項目

    好多朋友在使用IDEA創(chuàng)建項目時,總會碰到一些小問題.現(xiàn)在我們就演示一下使用IDEA創(chuàng)建web項目的完整步驟吧.文中有非常詳細的圖文示例哦,,需要的朋友可以參考下
    2021-05-05
  • Java代碼讀取properties配置文件的示例代碼

    Java代碼讀取properties配置文件的示例代碼

    這篇文章主要介紹了Java代碼讀取properties配置文件,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • SpringBoot利用validation實現(xiàn)優(yōu)雅的校驗參數(shù)

    SpringBoot利用validation實現(xiàn)優(yōu)雅的校驗參數(shù)

    數(shù)據(jù)的校驗是交互式網(wǎng)站一個不可或缺的功能,如果數(shù)據(jù)庫中出現(xiàn)一個非法的郵箱格式,會讓運維人員頭疼不已。本文將介紹如何利用validation來對數(shù)據(jù)進行校驗,感興趣的可以跟隨小編一起學習一下
    2022-06-06
  • Java中BigDecimal使用注意避坑指南

    Java中BigDecimal使用注意避坑指南

    Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數(shù)進行精確的運算,下面這篇文章主要給大家介紹了關于Java中BigDecimal使用注意避坑的相關資料,需要的朋友可以參考下
    2023-02-02
  • 23種設計模式(9) java橋接模式

    23種設計模式(9) java橋接模式

    這篇文章主要為大家詳細介紹了java設計模式之橋接模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • JVM(Java?Virtual?Machine,Java虛擬機)的作用詳解

    JVM(Java?Virtual?Machine,Java虛擬機)的作用詳解

    JVM是Java語言實現(xiàn)“一次編寫,到處運行”特性的基石,也是Java平臺的核心組成部分,其主要作用包括平臺無關性、內(nèi)存管理、運行Java程序、安全性以及性能優(yōu)化,通過這些功能,JVM確保了Java程序的可移植性、高效性和安全性
    2025-03-03
  • Java開發(fā)深入分析講解二叉樹的遞歸和非遞歸遍歷方法

    Java開發(fā)深入分析講解二叉樹的遞歸和非遞歸遍歷方法

    樹是一種重要的非線性數(shù)據(jù)結構,直觀地看,它是數(shù)據(jù)元素(在樹中稱為結點)按分支關系組織起來的結構,很象自然界中的樹那樣。樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形象表示,本篇介紹二叉樹的遞歸與非遞歸遍歷的方法
    2022-05-05
  • SpringBoot+Redis?BitMap實現(xiàn)簽到與統(tǒng)計的項目實踐

    SpringBoot+Redis?BitMap實現(xiàn)簽到與統(tǒng)計的項目實踐

    最近項目里需要集成簽到和統(tǒng)計功能,連續(xù)簽到后會給用戶發(fā)放一些優(yōu)惠券和獎品,以此來吸引用戶持續(xù)在該品臺進行活躍,本文就詳細的介紹一下如何實現(xiàn),感興趣的可以了解一下
    2023-09-09
  • MyBatis通過JDBC數(shù)據(jù)驅(qū)動生成的執(zhí)行語句問題

    MyBatis通過JDBC數(shù)據(jù)驅(qū)動生成的執(zhí)行語句問題

    這篇文章主要介紹了MyBatis通過JDBC數(shù)據(jù)驅(qū)動生成的執(zhí)行語句問題的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • SpringBoot在IDEA中實現(xiàn)熱部署(JRebel實用版)

    SpringBoot在IDEA中實現(xiàn)熱部署(JRebel實用版)

    這篇文章主要介紹了SpringBoot在IDEA中實現(xiàn)熱部署(JRebel實用版),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05

最新評論