网站首页 > java教程 正文
前言
最近和一位朋友聊自己微信小程序的事情,朋友的建议将小程序的文章给去掉,增加一个新的功能,他说我写的文章很鸡肋。自己听完之后内心及其犹豫,一方面自己也很清楚自己的文字的功底确实不行,写的技术文章没多少人看,但是一直想这个能锻炼出来。另一方面虽然文章没人看,但是文章的功能是自己一点一点写出来的,让我隐藏起来,我确实有点不想接受。
犹豫几天,还是决定去除这个功能,刚好最近对于后台的重构也在进行,所以决定来一个大的改版(估计需要一段时间才能真正上线新的功能)。
今天的文章,也就是在准备的过程中实现的一个功能-导出PDF。
组件选用
在日常的工作中,利用POI导出Excel的功能需求自己做了不少,但是导出PDF确实是第一次做,在百度上进行一番查阅,发现大家基本都是使用Abode的iText组件来生成PDF。
所以这里也随大流,选用iText,官网上iText已经到7了,但是百度搜索的案例中,大多用的都是iText5,这里考虑自己对iText不熟悉,所以还是根据案例也选用5,一方面,入手快有现成的代码可以复制,另一方面用的人多,对于一些常见的坑,填的人也会多,自己就不用一点点摸索了
当然了,如果愿意摸索,可以去官网看案例和API,下面附上官网地址:https://itextpdf.com/en
开发记录
引入依赖文件
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency> <!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency>
创建Document对象,三种方式:
Document document =new Document(); // 默认页面大小是A4
Document document =new Document(PageSize.A4); // 指定页面大小为A4
Document document =new Document(PageSize.A4,50,50,30,20); // 指定页面大小为A4,且自定义页边距(marginLeft、marginRight、marginTop、marginBottom)
创建PdfWriter对象
第一个参数是对文档对象的引用
第二个参数是需要写入的PDF文件的实际路径。我们也可以使用字节数组流实现。
//实际文件 File file = new File("/Users/chenlong/Documents/test.pdf"); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file)); //字节数组流 ByteArrayOutputStream baos = null; baos = new ByteArrayOutputStream();//构建字节输出流 PdfWriter.getInstance(doc,baos);//将PDF文档对象写入到流
Write对象创建完的操作
首先打开documet(这个过程就像我们创建一个空的pdf文件,然后打开来创作一样)
然后开始写入数据
设置文档属性
最后关闭
document.open(); document.addTitle("标题"); document.addAuthor("每天学Java"); document.addSubject("测试报表"); document.addKeywords("关键字"); document.addCreator("陈龙"); new PDFUtil().generatePDF(document, reportVO); document.close();
而generatePDF方法是自定义的方法,对于文档内容的填充。
通常我们会用到的内容内容类有:
段落Paragraph 表格table 单元格内容样式cell 直线 LineSeparator 点线 DottedLineSeparator 超链接 Anchor 添加图片 Image 定位 Anchor 水印功能 Watermark内部类,需要继承 PdfPageEventHelper类 writer.setPageEvent(new Watermark());
里面的详细属性这里就不在说了,我们只看简单的段落
//字体大小,粗细,颜色 Font titlefont = new Font(bfChinese, 16, Font.BOLD,, BaseColor.RED); //段落 Paragraph paragraph = new Paragraph("测试报表", titlefont); //段落属性 paragraph.setAlignment(1); //设置文字居中 0靠左 1,居中 2,靠右 paragraph.setIndentationLeft(100); //设置左缩进 paragraph.setIndentationRight(100); //设置右缩进 paragraph.setFirstLineIndent(24); //设置首行缩进 paragraph.setLeading(40f); //行间距 paragraph.setSpacingBefore(5f); //设置段落上空白 paragraph.setSpacingAfter(10f); //设置段落下空白 //分割线 Paragraph p1 = new Paragraph(); p1.add(new Chunk(new LineSeparator())); //如果需要换行 paragraph.add(Chunk.NEWLINE); //定义一个块,块之间的换行也可以使用Chunk.NEWLINE Chunk chunk = new Chunk("我是一个文本块"); chunk.setFont(problems); chunk.setWordSpacing(50); paragraph.add(chunk); //需要将段落增加到document中 document.add(paragraph); document.add(p1);
实现过程参考文章:
https://blog.csdn.net/weixin_37848710/article/details/89522862
关于小程序:
之前朋友问我,指望这个挣钱吗?我也好好的问了自己,如实回答,自己毕业一年多了,小程序也一年多了,我确实希望它通过广告费啥的挣到钱,但是如果没有广告,我觉得还是会去做,因为到了这个阶段,每一次代码的改动和架构的调整,需要我付出学习和思考的时间,而这能让我拿到现阶段我工作中所得不到知识。
猜你喜欢
- 2024-10-09 Java 合并、拆分PDF文档(javapdf合并成一个pdf)
- 2024-10-09 Java 转换TIFF到PDF(java转pdf文件)
- 2024-10-09 Word处理控件Aspose.Words功能演示:使用 Java 将 RTF 转换为 PDF
- 2024-10-09 惊呆了了,居然发现了这本Java从小白到大牛的高清版PDF
- 2024-10-09 「Java」PDF文档格式转换之PDF转tiff
- 2024-10-09 Java 拆分PDF页面(java拆分word)
- 2024-10-09 使用Java 将PPT转换为PDF、XPS等格式
- 2024-10-09 Spire.PDF for Java v2.9.1上线!支持多页PDF转换为单个SVG
- 2024-10-09 java操作pdf之iText(java pdfwriter)
- 2024-10-09 SpringBoot集成文件 - 如何集成itextpdf导出PDF?itext的变迁?
你 发表评论:
欢迎- 最近发表
-
- pyinstaller打包python程序高级技巧
- 将python打包成exe的方式(python打包成exe的方法)
- Python打包:如何将 Flask 项目打包成exe程序
- py2exe实现python文件打包为.exe可执行程序(上篇)
- 如何将 Python 项目打包成 exe,另带卸载功能!
- Python打包成 exe,太大了该怎么解决?
- 可视化 Python 打包 exe,这个神器绝了!
- 案例详解pyinstaller将python程序打包为可执行文件exe
- Cocos 3.x 菜鸟一起玩:打包window程序
- 怎么把 Python + Flet 开发的程序,打包为 exe ?这个方法很简单!
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)