Contents

在Bash中合并PDF文件

1. 概述

有几次我们想要合并 PDF 文件,以便组织它们以减少混乱或与其他人共享。为此,Linux 提供了不同的工具。以下是一些最常用的:

尽管这些工具具有许多功能,但我们将在本教程中重点介绍它们的文件合并功能。让我们一一来看看它们。

2. pdfunite

这是一个简单直接的工具,可以合并多个 PDF 文件。

假设我们有两个 PDF 文件要合并:

$ ls -lh
total 64K
-rw-r--r-- 1 bluelake bluelake 29K Jan 10 12:44 simple1.pdf
-rw-r--r-- 1 bluelake bluelake 29K Jan 10 12:44 simple2.pdf

我们可以运行以下命令来合并这些文件:

$ pdfunite simple1.pdf simple2.pdf simple.pdf
$ ls -lh
total 116K
-rw-r--r-- 1 bluelake bluelake 29K Jan 10 12:44 simple1.pdf
-rw-r--r-- 1 bluelake bluelake 29K Jan 10 12:44 simple2.pdf
-rw-r--r-- 1 bluelake bluelake 49K Jan 10 12:48 simple.pdf

正如我们所看到的,用法非常简单。为了创建一个合并的 PDF 文件,我们提供了输入 PDF 文件名和一个输出文件名,生成的 PDF 将写入该文件名。在这里,  simple1.pdf和 simple2.pdf合并为 simple.pdf

这里要注意的一件事是,我们需要确保我们在最后给出了一个输出文件名,否则,它将覆盖列表中提到的最后一个文件名。

3. gs

此工具可以处理 PDF 文件和 postscript 文件,并生成要发送到打印机或文件的输出。我们将使用此工具的 pdfwrite 设备功能来合并 PDF 文件

此命令支持 -sDEVICE选项,我们可以使用该选项将输出发送到 PDF 文件。

让我们通过一个例子来检查我们如何做到这一点:

$ gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=merged.pdf simple1.pdf simple2.pdf simple3.pdf
$ ls -l
-rw-r--r-- 1 bluelake bluelake  84948 Jan 10 13:27 merged.pdf
-rw-r--r-- 1 bluelake bluelake  29663 Jan 10 12:44 simple1.pdf
-rw-r--r-- 1 bluelake bluelake  29663 Jan 10 13:00 simple2.pdf
-rw-r--r-- 1 bluelake bluelake  60748 Jan 10 12:59 simple3.pdf

从以上结果可以看出,该命令生成了一个merged.pdf文件。它将包含来自 simple*.pdf 文件的所有页面。 让我们检查使用的不同参数:

  • -q:安静模式
  • -dBATCH:指示处理完所有文件后退出
  • -dNOPAUSE:处理每个文件后禁用提示
  • -sDEVICE : 选择输出设备以保存为 pdf 文件
  • -sOutputFile:传递最终输出文件的名称

该工具能够使用支持的输出设备以不同格式写入输出。要获取设备列表,我们可以运行 gs -h命令。从这个列表中,我们可以将它们提供给 -sDEVICE 选项以生成相应的格式化输出。

4. convert

通常,我们使用 convert工具来编辑或更改图像,例如调整大小、裁剪、模糊和其他各种图像处理功能。它有无数的选项可以对不同的图像文件格式进行这些操作。但是,我们也可以使用它来合并 pdf 文件。

我们来看看它的用法:

$ convert -density 300x300 -quality 100 simple1.pdf simple2.pdf simple3.pdf out.pdf
$ ls -lh
-rw-r--r-- 1 bluelake bluelake 568K Jan 10 19:15 out.pdf
-rw-r--r-- 1 bluelake bluelake  29K Jan 10 12:44 simple1.pdf
-rw-r--r-- 1 bluelake bluelake  29K Jan 10 13:00 simple2.pdf
-rw-r--r-- 1 bluelake bluelake  60K Jan 10 12:59 simple3.pdf

在上面的命令中,我们给出了三个 简单的*.pdf文件。为此,我们得到了一个out.pdf文件作为输出。out.pdf将合并所有内容。

命令中使用的选项有:

  • -density:图像的水平和垂直密度
  • -quality:所需的压缩值

这样做的一个问题是,最终的 PDF 不会保留原始 PDF 文件中的超链接

5. qpdf

qpdf是一个主要用于重构 PDF 文件的工具。每当我们需要从不同的 PDF 文件中提取几页,以特定的顺序排列它们并将它们合并到一个 PDF 文件中时,qpdf就是这样做的工具。

但是现在,让我们检查一下如何使用 qpdf合并 PDF 文件:

$ qpdf --empty --pages simple1.pdf simple2.pdf simple3.pdf -- new.pdf
$ ls -l
-rw-r--r-- 1 bluelake bluelake  106891 Jan 11 11:04 new.pdf
-rw-r--r-- 1 bluelake bluelake   29663 Jan 10 12:44 simple1.pdf
-rw-r--r-- 1 bluelake bluelake   29663 Jan 10 13:00 simple2.pdf
-rw-r--r-- 1 bluelake bluelake   60748 Jan 10 12:59 simple3.pdf

我们可以看到该命令创建了一个新的*.pdf*文件。它将 按照命令行中指定的顺序包含来自simple*.pdf文件的所有内容。

让我们看看使用的不同参数:

  • –empty:从一个空文档开始
  • –pages : 指定文件