ITEXT 简介

它是用于操作 PDF 文件的 Java API。
本文记录了使用 iText5 创建和读取一个简单的 PDF 文档的过程。
iText5 官方文档:https://itextpdf.com/en/resources/api-documentation/itext-5-java

创建 PDF 文件

  1. 创建一个 Maven 工程并引入依赖
<!-- License AGPL 3.0 -->
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version>
</dependency>
  1. 编写创建 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();
}
  1. 效果展示

读取 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 学习笔记相关推荐

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  2. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  3. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  5. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  6. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. 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 ...

  9. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

最新文章

  1. [DM] 都是套路: 从上帝视角看透时间序列和数据挖掘
  2. centos 安装 rabbitMq
  3. 鍵盤彈出,頁面佈局被推上去了.....
  4. 创建hadoop用户并配置ssh免密码登录
  5. public medical image database
  6. MapXtreme 安装、编码及打包注意事项
  7. 浅谈 SQL Server 内部运行机制
  8. (69)FPGA模块调用(system Verilog调用Verilog)
  9. python读取xml文件
  10. 代码测试意味着完全消灭了 Bug?
  11. 【毕业设计/课程设计】基于大数据个性化音乐推荐算法分析
  12. 微信小程序富文本去除首行缩进样式_小程序富文本处理wxParse
  13. C#搞工控的一些代码
  14. A股实时行情接口资源分享
  15. python 求定积分
  16. 使用Dockerfile创建包含nginx-fair和nginx-check模块的nginx镜像
  17. 【C++】STL简介
  18. poi替换word内容
  19. C#调用DLL的几种方法
  20. 应用进程和内核的关系

热门文章

  1. ubuntu切换独立显卡的方法
  2. asp毕业设计——基于asp+sqlserver的住户管理系统设计与实现(毕业论文+程序源码)——住户管理系统
  3. mysql之三星索引
  4. DataStage开发常见问题
  5. 安卓和前段交互——视频播放video标签横竖屏
  6. java 写入excel或者在excel中追加数据
  7. 飞浆AI studio人工智能课程学习(3)-在具体场景下优化Prompt
  8. php获取数据库头像,phpcms获取头像如何写入数据库
  9. 数据通大数据导航,助力CSDN大数据的伙伴们!
  10. 利用frp进行内网穿透将iPad变成“iPad Book”