「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战」
PDF神器iText英文版翻译与学习
作者: 薛大郎.
英文原版: iText in Action 2nd Edition.pdf
坚持. 分享. 成长. 利他 !
一. 前言
天下熙熙皆为利来,天下攘攘皆为利往
在这个物欲横流的时代, 品性和修养只能自己去顿悟, 并在这世间感悟. 细节决定成败, 性格决定命运
这些耳熟能详的语句, 我们可能依稀还记得, 可是怎样塑造自己的性格, 才能决定自己的命运呢? 其实还是在于自己的一些理解, 形成了价值观, 然后有了做人处事儿的思维, 然后在与人社交工作中, 才形成了文化. 这样命运就注定了?! 其实还可以去修炼自己的品性, 让自己更有修养, 能够承接更大的命运.
二.正文.
第二章 操作已有Pdf文档.
这一章我们将学习要操作已经有的Pdf文档, 主要操作有复制,刻章(stamp 即PhotoShop中的采样,刻章模型操作), 分割和合并, 我们也会学习添加一些动作和JavaScript, 也会学习向Pdf中设置的form表单填充内容
1. 操作已有Pdf文件
第一节主要包括内容有:
- 从已有Pdf文档中引入某些页
- 添加内容到已有Pdf文档中和填充form表单
- 从已有Pdf文档中复制某些页
首先我们还是要说一下Pdf文档的特性, Pdf文档中每一个字符或者字形都有固定位置, 无论是用那个PdfReader查看这个文档, 我们看到的Pdf文档都一样. 这个跟Office中的word等是不一样的, 最明显的就是Pc 和 手机查看同一个word文档的时候. 这样大家是不是理解就有了画面了.
但是这种特性也就使得它有一些弊端, 如果我们编辑Pdf的时候, 都可能要重新编排文本, 甚至有些要换到下一页, 以此类推, 等于重新生成一个Pdf文档. 所以建议大家如果是从Office中另存为生成的Pdf, 可以直接编写源文件, 然后再另存为Pdf, 这样也是最快的. 要记住编辑Pdf文档和编辑word文档是完全两个概念.
1.1 使用PdfReader打开已有的Pdf文件
我们可以通过PdfReader来获取这个Pdf文档有多少页, 以及那一页的定位.
public static void inspect(PrintWriter writer, String filename) throws IOException {
// 直接就可以通过文件目录和文件名称获取到对应的reader.
PdfReader reader = new PdfReader(filename);
writer.println(filename);
writer.print("Number of pages: ");
// 获取总页数
writer.println(reader.getNumberOfPages());
// 第一页的矩形大小
Rectangle mediabox = reader.getPageSize(1);
writer.print("Size of page 1: [");
writer.print(mediabox.getLeft());
writer.print(',');
writer.print(mediabox.getBottom());
writer.print(',');
writer.print(mediabox.getRight());
writer.print(',');
writer.print(mediabox.getTop());
writer.println("]");
writer.print("Rotation of page 1: ");
// 获取第一页的 旋转度
writer.println(reader.getPageRotation(1));
writer.print("Page size with rotation of page 1: ");
writer.println(reader.getPageSizeWithRotation(1));
writer.print("File length: ");
// 文件大小
writer.println(reader.getFileLength());
writer.print("Is rebuilt? ");
// 是否有错误和重建过
writer.println(reader.isRebuilt());
writer.print("Is encrypted? ");
// 是否加密
writer.println(reader.isEncrypted());
writer.println();
writer.flush();
}
当使用AdobeReader打开一个Pdf文件的时候, 如果这个文件已经损坏, 就会有一个提示: "There was an error opening this document. The file is damaged and could not be repaired." 当我们使用PdfReader打开这样的损坏的文件的时候也会抛出 InvalidPdfException 异常, “Rebuild failed: trailer not found; original message: PDF startxref not found.” 所以要注意只能打开可用的文件.
当然如果只是一些 小的语法错误或者一些警告, PdfReader会进行修补重建, 使得我们可以打开此文件.
这就是我们今天的内容了, 明天我们稍微详细查看PdfReader的源码来解读.