SpringBoot集成iTextPDF的實例
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>
注意:不加下面這個依賴無法設置中文
使用步驟
- 先創(chuàng)建
Document
對象,該對象是PDF文檔,可以進行一些屬性設置 PdfPTable
是表格對象,用于表格對象的創(chuàng)建、管理及使用PdfPCell
是具體的表格子項了,里面就是我們要操作寫入的對象- 將
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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot利用validation實現(xiàn)優(yōu)雅的校驗參數(shù)
數(shù)據(jù)的校驗是交互式網(wǎng)站一個不可或缺的功能,如果數(shù)據(jù)庫中出現(xiàn)一個非法的郵箱格式,會讓運維人員頭疼不已。本文將介紹如何利用validation來對數(shù)據(jù)進行校驗,感興趣的可以跟隨小編一起學習一下2022-06-06JVM(Java?Virtual?Machine,Java虛擬機)的作用詳解
JVM是Java語言實現(xiàn)“一次編寫,到處運行”特性的基石,也是Java平臺的核心組成部分,其主要作用包括平臺無關性、內(nèi)存管理、運行Java程序、安全性以及性能優(yōu)化,通過這些功能,JVM確保了Java程序的可移植性、高效性和安全性2025-03-03Java開發(fā)深入分析講解二叉樹的遞歸和非遞歸遍歷方法
樹是一種重要的非線性數(shù)據(jù)結構,直觀地看,它是數(shù)據(jù)元素(在樹中稱為結點)按分支關系組織起來的結構,很象自然界中的樹那樣。樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形象表示,本篇介紹二叉樹的遞歸與非遞歸遍歷的方法2022-05-05SpringBoot+Redis?BitMap實現(xiàn)簽到與統(tǒng)計的項目實踐
最近項目里需要集成簽到和統(tǒng)計功能,連續(xù)簽到后會給用戶發(fā)放一些優(yōu)惠券和獎品,以此來吸引用戶持續(xù)在該品臺進行活躍,本文就詳細的介紹一下如何實現(xiàn),感興趣的可以了解一下2023-09-09MyBatis通過JDBC數(shù)據(jù)驅(qū)動生成的執(zhí)行語句問題
這篇文章主要介紹了MyBatis通過JDBC數(shù)據(jù)驅(qū)動生成的執(zhí)行語句問題的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08SpringBoot在IDEA中實現(xiàn)熱部署(JRebel實用版)
這篇文章主要介紹了SpringBoot在IDEA中實現(xiàn)熱部署(JRebel實用版),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05