Tuesday, February 20, 2024

如何用 Ghostscript 精确截取一页 PDF 中的某一部分并另存为一个 PDF 文件

举一个例子:市政府的地税单,我选择只要它的电子版,就不会收到邮寄的纸质版。电子版是一个只有一页的 PDF 文件。这一页左边的一半才是地税信息,右边的一半是几个分期支付计划的栏目(Schedule)。我现在需要提交纸质地税单给某个机构。我当然可以打印出整页,但是,这肯定是多余的,因为只有左边的一半是地税信息,而且,整页显然不是 Letter、Legal 或者 A4 等标准的纸张尺寸,甚至与各种标准的纸张尺寸差得很远。

+++++

找出 PDF 文件的规格

  1. 用 Irfanview 打开 PDF 文件,然后将这一页另存为 JPG 图片。
  2. 用 Irfanview 查看这个 JPG 长和宽的 pixel 和 DPI,通过计算器查到,此 PDF 文件正好是两个 Letter 纸张大小并排而成的。

上面是从 PDF 文件找出纸张规格。我还经常用这个方法来找出某些 B 字号的纸张到底是那种规格。比如市政府邮寄出来的纸质地税单并不是 Letter 规格,比 Letter 小很多,大概率是某种 B 字号纸张。还有银行邮寄出来的纸张经常也是某种 B 字号。我要 PDF 电子化它们并保存起来,就必须先找出它们的规格。方法类似:

  1. 将纸张按照某个 DPI——常用 300 或者 600——扫描出一张 JPG 图片;
  2. 然后用计算器来找出是哪种规格的纸张;
  3. 然后按照这种纸张规格来实现纸质文件的 PDF 电子化。

+++++

如何打印出左边的一半

既然左边一半是一个 Letter 大小,那么只需要打印出左边一半到一张 Letter 纸上就可以了,但是如何打印一页 PDF 的左边一半?这种操作我从来遇到过,也没想到会遇上。

最简单的方法,用 Irfanview/GIMP/Photoshop 等图片编辑工具将一页 PDF 另存为 JPG 文件,然后一分为二,再打印左边的一半图片到 Letter 纸张上就可以了。将 PDF 转化成 JPG 再打印,这个过程内容质量会损失不少,不是十分理想。我不喜欢这种方法。

互联网上还有人建议用 macOS 上的 Preview 选择左边的一半,再切割,然后生成一个 PDF 文件,再打印。内容质量基本没损失,但是 Preview 没有精确选择的功能,切割出来的不是完美的一半。

还有更好的方法吗?颇费了一番周折,最后我搜到了这个解决方法。回答问题的人还详细解释了坐标是如何定义的,这是其中的难点。这个方法可以精确截出(crop)一页中的任何部分,然后存成另外一个 PDF 文件。这简直太完美了。用到的工具是我经常用的 Ghostscript。我用它来做很多事,比如去除 PDF 文件的密码、压缩 PDF 文件等。

完美解决一个问题之后的满足感是难以言表的。

No comments:

Post a Comment