Java之生成Pdf并对Pdf内容操作
虽说网上有很多可以在线导出Pdf或者word或者转成png等格式的工具,但是我觉得还是得了解知道是怎么实现的。一来,在线免费转换工具,是有容量限制的,达到一定的容量时,是不能成功导出的;二来,业务需求,特别是OA方面的项目,报表不单单只是在线通过浏览器登录对应的站点浏览还需有时导出Pdf格式(pdf格式为通用格式,无论是浏览器还是其他工具都能打开,因此特别是做项目实施的,除了用word编写文档之外,通常还导出一下pdf,这样一来保证给老板看时,不会因为某种原因打不开文件看不到对应的实质内容。
直接开门见山:
一、导入Maven依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>site.duanzy</groupId> <artifactId>study_pdf</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>study_pdf</name> <description /> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.54</version> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>javax.servlet.jsp.jstl</artifactId> <version>1.2.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.2</version> <configuration> <version>3.1</version> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
二、编写Java代码
package site.duanzy.pdf.demo; import java.io.FileNotFoundException; import java.io.FileOutputStream; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; public class TestPDFDemo1 { public static void main(String[] args) throws FileNotFoundException, DocumentException { // 1.新建document对象 Document document = new Document(); // 2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。 // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。 PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("E://Pdf//test.pdf")); writer.flush(); writer.close(); // 3.打开文档 document.open(); // 4.添加一个内容段落 document.add(new Paragraph("Hello World!")); // 5.关闭文档 document.close(); } }
package site.duanzy.pdf.demo; import java.io.FileNotFoundException; import java.io.FileOutputStream; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; public class TestPDFDemo2 { public static void main(String[] args) throws FileNotFoundException, DocumentException { // 创建文件 Document document = new Document(); // 建立一个书写器 PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("E://Pdf//test2.pdf")); // 打开文件 document.open(); // 添加内容 document.add(new Paragraph("Some content here")); // 设置属性 // 标题 document.addTitle("this is a title"); // 作者 document.addAuthor("Mr You"); // 主题 document.addSubject("this is subject"); // 关键字 document.addKeywords("Keywords"); // 创建时间 document.addCreationDate(); // 应用程序 document.addCreator("hd.com"); // 关闭文档 document.close(); // 关闭书写器 writer.close(); } }
package site.duanzy.pdf.demo; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; public class TestPDFDemo3 { public static void main(String[] args) throws DocumentException, IOException { // 创建文件 Document document = new Document(); // 建立一个书写器 PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("E://Pdf//test3.pdf")); // 打开文件 document.open(); // 添加内容 document.add(new Paragraph("HD content here")); // 图片1 Image image1 = Image.getInstance("E://Demo//workspace//java_pdf//src//main//webapp//images//test.png"); // 设置图片位置的x轴和y周 image1.setAbsolutePosition(100f, 550f); // 设置图片的宽度和高度 image1.scaleAbsolute(200, 200); // 将图片1添加到pdf文件中 document.add(image1); // 图片2 Image image2 = Image.getInstance(new URL("https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D220/sign=bda2ad09277f9e2f74351a0a2f31e962/0b46f21fbe096b63ea0d41bf0c338744eaf8accc.jpg")); // 将图片2添加到pdf文件中 document.add(image2); // 关闭文档 document.close(); // 关闭书写器 writer.close(); } }
以上值列举三个测试代码,更多可以参考我的github:https://github.com/youcong1996/study_simple_demo.git
记住该示例代码在我的侧分支,分支名为java-pdf。
三、运行测试代码的最后结果(结果最后是生成pdf,一般控制台不报错,就表示OK)
全面示例运行后生成的文件如下图所示:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java之生成条形码、PDF、HTML
关于Java生成HTML,可参考我的这篇文章:FreeMarker之根据模型生成HTML代码 当然了,该篇文章也会给你很多启发,比如,根据html生成html,大家不要小看这个,著名的WordPress博客文章,本质上就是这个机制,每发表一篇文章相当于新生成的一个HTML,内容不一样,样式基本是一致的。 下面进入正题: 一、导入Maven依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.foresee</groupId> <artifactId>mypdf<...
- 下一篇
手把手教你从零开始搭建SpringBoot后端项目框架
原料 新鲜的IntelliJ IDEA、一双手、以及电脑一台。 搭建框架 新建项目 打开IDE,点击File -> New Project。在左侧的列表中的选择Maven项目,点击Next。 填写GroupId和ArtifactId 什么是GroupId和ArtifactId?大家可以参考一下google出来的定义,可以参考一下。 GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。 ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称 简单理解一下,可以理解为GroupId就是你的Github账号,而ArtifactId就是你的具体某个项目,例如这个例子的源码,SpringBootDemo,detectiveHLH/springbootdemodetectiveHLH就是GroupId,而ArtifactId就是后面的项目名称。 所以,这里应该填写如下(仅供参考)。 GroupId: com.detectivehlh.test ArtifactId: parent test为项目的名称。Artif...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境