iText5 学习笔记
ITEXT 简介
它是用于操作 PDF 文件的 Java API。
本文记录了使用 iText5 创建和读取一个简单的 PDF 文档的过程。
iText5 官方文档:https://itextpdf.com/en/resources/api-documentation/itext-5-java
创建 PDF 文件
- 创建一个 Maven 工程并引入依赖
<!-- License AGPL 3.0 -->
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version>
</dependency>
- 编写创建 PDF 文件的代码
public static void createPdf() throws IOException, DocumentException {// step1 创建 Document 对象的实例Document document = new Document();// step2 为该 Document 创建一个 Writer 实例PdfWriter.getInstance(document, new FileOutputStream("D:/2021.pdf"));// 设置 PDF 文件的版本(默认版本是 1.4)writer.setPdfVersion(PdfWriter.VERSION_1_7);// step3 打开当前 Documentdocument.open();// step4 为当前 Document 添加内容// a. 添加英文内容document.add(new Paragraph("Hello World!"));// b. 添加中文内容String fontPath = "C:\\Windows\\Fonts\\simhei.TTF";BaseFont hei = BaseFont.createFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);Font font = new Font(hei, 16);document.add(new Paragraph("你好!", font));// c. 插入图片Image image = Image.getInstance("C:\\Users\\jujianfei\\Desktop\\picture.png");// 图片的宽度和高度 (单位是 pt)Rectangle rectangle = new Rectangle(120, 100);image.scaleAbsolute(rectangle);// 图片在页面上的原点坐标 (单位是 pt)image.setAbsolutePosition(120,480);document.add(image);// d. 创建新页document.newPage();document.add(new Paragraph("second Page"));// step5 操作完成后必须执行文档关闭操作document.close();
}
- 效果展示
读取 PDF 文件
public static void readPdf() throws Exception{// step1 创建 PdfReader 对象的实例PdfReader reader = new PdfReader("D:/2021.pdf");// step2 遍历 PDF 文件的每一页int pageSize = reader.getNumberOfPages();for (int i=1; i<=pageSize; i++){// step3 获取 PDF 文件指定页中的文本System.out.println(PdfTextExtractor.getTextFromPage(reader, i));// step4 获取 PDF 文件指定页中的图片PdfDictionary pageN = reader.getPageN(i);PdfDictionary resource = (PdfDictionary) PdfReader.getPdfObject(pageN.get(PdfName.RESOURCES));// a. 获取 PDF 中图片对象。如果没有图片对象,返回 nullPdfDictionary xObj = (PdfDictionary) PdfReader.getPdfObject(resource.get(PdfName.XOBJECT));if (xObj == null){continue;}for (PdfName pdfName : xObj.getKeys()) {PdfObject object = xObj.get(pdfName);if (!object.isIndirect()) {continue;}PdfDictionary pdfObject = (PdfDictionary) PdfReader.getPdfObject(object);PdfName type = (PdfName) PdfReader.getPdfObject(pdfObject.get(PdfName.SUBTYPE));if (PdfName.IMAGE.equals(type)) {// b. 保存图片byte[] imageBytes = PdfReader.getStreamBytesRaw((PRStream) pdfObject);saveBytesToFile(imageBytes, "d:/test.jpg");}}}
}private static void saveBytesToFile(byte[] bytes, String filePath) throws Exception{BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(new File(filePath)));outputStream.write(bytes);
}
这里记录了读取PDF的文本内容和图片内容的代码。没有对其中的核心对象做介绍。
因为,如果要了解核心对象,就需要对PDF文件的格式有一定的了解。后面学习到了再研究。
iText5 学习笔记相关推荐
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)
Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...
- MongoDB学习笔记(入门)
MongoDB学习笔记(入门) 一.文档的注意事项: 1. 键值对是有序的,如:{ "name" : "stephen", "genda" ...
最新文章
- [DM] 都是套路: 从上帝视角看透时间序列和数据挖掘
- centos 安装 rabbitMq
- 鍵盤彈出,頁面佈局被推上去了.....
- 创建hadoop用户并配置ssh免密码登录
- public medical image database
- MapXtreme 安装、编码及打包注意事项
- 浅谈 SQL Server 内部运行机制
- (69)FPGA模块调用(system Verilog调用Verilog)
- python读取xml文件
- 代码测试意味着完全消灭了 Bug?
- 【毕业设计/课程设计】基于大数据个性化音乐推荐算法分析
- 微信小程序富文本去除首行缩进样式_小程序富文本处理wxParse
- C#搞工控的一些代码
- A股实时行情接口资源分享
- python 求定积分
- 使用Dockerfile创建包含nginx-fair和nginx-check模块的nginx镜像
- 【C++】STL简介
- poi替换word内容
- C#调用DLL的几种方法
- 应用进程和内核的关系
热门文章
- ubuntu切换独立显卡的方法
- asp毕业设计——基于asp+sqlserver的住户管理系统设计与实现(毕业论文+程序源码)——住户管理系统
- mysql之三星索引
- DataStage开发常见问题
- 安卓和前段交互——视频播放video标签横竖屏
- java 写入excel或者在excel中追加数据
- 飞浆AI studio人工智能课程学习(3)-在具体场景下优化Prompt
- php获取数据库头像,phpcms获取头像如何写入数据库
- 数据通大数据导航,助力CSDN大数据的伙伴们!
- 利用frp进行内网穿透将iPad变成“iPad Book”