SpringBoot集成iTextPDF的实例
更新时间:2024年09月20日 10:43:07 作者:kicinio
SpringBoot集成iTextPDF时,创建PDF文档涉及Document、PdfPTable和PdfPCell对象,设置文档大小和页边距,使用Paragraph设置段落样式,并通过Table和Cell控制表格样式和对齐,还可加入图片美化文档,这些步骤对于生成具有中文内容的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>
注意:不加下面这个依赖无法设置中文
使用步骤
- 先创建
Document
对象,该对象是PDF文档,可以进行一些属性设置 PdfPTable
是表格对象,用于表格对象的创建、管理及使用PdfPCell
是具体的表格子项了,里面就是我们要操作写入的对象- 将
PdfPCell
对象加入到PdfPTable
对象中,PdfPTable
对象再加入到Document
对象中,便完成了文档的创建
基本属性
文档大小:
由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);//边距:单元格的边线与单元格内容的边距 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");// 创建者 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(); }
效果
- 加上图片之后:
有兴趣的读者可自行美化
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java SpringBoot集成ChatGPT实现AI聊天
ChatGPT已经组件放开了,现在都可以基于它写插件了,也许可以用它结合文字语音开发一个老人小孩需要的智能的说话陪伴啥的,这篇文章就介绍SpringBoot结合ChatGPT实现AI聊天感兴趣的同学可以借鉴一下2023-04-04spring声明式事务 @Transactional 不回滚的多种情况以及解决方案
本文主要介绍了spring声明式事务 @Transactional 不回滚的多种情况以及解决方案,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-11-11
最新评论