无需重新压缩即可快速将许多 JPG 图像合并为一个 PDF 的软件

软件推荐 视窗 pdf jpg
2021-10-14 00:53:31

我过去使用没有直接“转为 PDF”选项的打印机扫描了许多文档,因此我有多个名为“Document1、Document2”的文件夹。在每个文件夹中都有许多 jpg,例如 001.jpg、002.jpg、003.jpg、..

我想将它们加入一个 PDF 文件。现代打印机也采用同样的方法,将 JPG“流”封装并为每一页显示一个。

我尝试使用一个简单的图像查看器来完成它,方法是选择所有图像并以 PDF 格式打印。这导致在 JPG 中再次重新压缩所有图像,但有几个缺点:

  • 如果我选择的 JPG 质量太差,图像看起来超级糟糕,压缩压缩的东西会导致生成损失
  • 如果我选择一个质量非常高的 JPG 接近 ~100% 以防止额外的生成损失,那么输出 PDF 的文件大小将会很大。

这就是我的想法:

因为存储在PDF文件中的图像只不过是JPG流,难道不重新压缩就可以将原始JPG文件直接包含到PDF容器中吗?这将是实现无损失和无压缩的最佳方式!

万一,我可以使用哪个软件来做到这一点?那里有一些类似ffmpegPDF 的东西(我的头去ffmpeg -c:v copy选择将流复制到不同的容器中)?也许是一个 postscript 解析器直接调用,渲染一个 jpg 文件和许多命令行选项的文件夹?

很高兴找到适用于所有操作系统的命令行软件。但是,该软件必须在 Windows 下运行。


编辑:除了多平台软件的主要问题,我试图理解为什么 Adob​​e Acrobat 本身不能做到这一点。在高级设置对话框中,似乎可以使用以下选项:如果可能,将原始 JPEG 图像保存为 PDF

Adobe PDF 设置:如果可能,将原始 JPEG 图像保存为 PDF

可能这里的问题是由我的图像查看器程序给出的,它以某种方式重新采样和重新处理 JPG,而不是直接在 Adob​​e Acrobat Distiller 中提供它们。

我应该在 Acrobat Application 中拖放文件吗?

4个回答

img2pdf

网站:https ://gitlab.mister-muffin.de/josch/img2pdf/blob/master/README.md

img2pdf 是一个带有命令行界面的 Python 库,它直接(即无损且无需重新压缩)将 JPG 图像嵌入到 PDF 中。

私人使用

有时,我需要将高分辨率 TIFF 文件自动转换为单独的 PDF 页面。我正在利用 PowerShell 脚本将 TIFF 缩小为 JPEG,然后调用 .NET API,然后调用 img2pdf CLI 生成多个 PDF。最终,PDF 使用 pdftk 与其他一些 PDF 文件合并。
底线是: img2pdf 非常适合我的工作流程,我绝对可以推荐它。
另外,作者对我曾经提出的一个问题做出了非常迅速的回应。

安装

前提是你已经安装了 Python,你可以运行

pip install img2pdf

用法

  • 单个 JPG 文件:

    python.exe -m img2pdf inputImage.jpg -o output.pdf
    
  • 通配符(在 PowerShell 中):

    python.exe -m img2pdf $(gci myFolder/*.jpg) -o output.pdf
    

    快速测试显示,img2pdf 甚至似乎支持文件名中的空格。

  • 通配符(在大多数 *nix shell 中):

    python.exe -m img2pdf myFolder/*.jpg -o output.pdf
    
  • 一次转换多个文件

    在某些情况下,您可以达到允许的命令行字符串的最大长度。限制因操作系统而异,例如,您可以使用至少2047 个字符,具体取决于您的 Windows 版本,在 Linux 上,您可以运行xargs 来查看您当前的限制

    在这种情况下,您可以对单个文件运行 img2pdf,然后使用任何能够执行此操作的 PDF 工具将它们组合起来,例如 pdftk:

    1. for /r %i in (*.jpg) do python -m img2pdf -o %i.pdf %i
      (Windows 命令提示符语法)
    2. pdftk.exe *.pdf cat output combined.pdf

img2pdf 的作者josch对包含 Windows 内置通配符支持的任何拉取请求持开放态度:https ://gitlab.mister-muffin.de/josch/img2pdf/issues/25#note_122

(感谢user3450548提到一次转换多个文件的潜在问题并在评论中分享他的解决方案!)

PDFJam

PDFJam是texlive的一部分,是一个为LaTeXpdfpages实用程序提供前端的包装脚本

此脚本接受 JPG 和 PNG 图像以及 PDF 文件,并将它们连接在一起。输入不会重新压缩,而是嵌入到 PDF 流中。

用法

以下命令将在当前工作目录中创建一个名为 的输出文件XXX-joined.pdf,其中XXX是命令行上第一个文件的名称:

     pdfjam --fitpaper true --rotateoversize true --suffix joined /path/to/*.jpg

平台

  1. 视窗

    下载并安装 Cygwin一定要选择texlive-collection-binextra包:安装 texlive-collection-binextra 包

  2. 基于 Arch Linux 的发行版

    用于pacman安装texlive-core

  3. 基于 Debian(Ubuntu 等)

    该工具作为texlive-extra-utils软件包的一部分分发。

Adobe 杂技演员

不是 3 种解决方案中最好的,也请检查下面的 PDFJam

我添加这个答案只是为了为社区做出贡献。但我不会投票,因为这个答案只针对主要主题提供了一个解决方案,而没有考虑到次要要求:

  • 自由
  • 命令行
  • 多平台

Adobe Acrobat 本身显然允许将多个 JPG 文件连接在一起,而无需应用重新压缩。

该接口可以通过多种方式调用,我将用相应的图像显示它们。

通过选择许多文件并右键单击它们:

合并通过右键单击调用的文件

通过点击 Adob​​e Acrobat Pro 中的创建按钮:

合并 Acrobat 主窗口调用的文件

在任何情况下,Adobe Acrobat 都会打开“合并文件”窗口,允许您选择要添加的文件或文件夹:

合并文件界面

通过选择中等设置文件大小,并且如果您使用默认选项(您没有更改 Adob​​e PDF 标准设置以覆盖它们),程序将输出一个包含 JPG 的 PDF 文件。

在我对 336 MB 磁盘空间的 385 个 JPG 文件的测试中,pdf 带有 337 MB 文件,增加了 1MB 开销。

使用 PDFJam 脚本时,过载几乎为零,从而生成了 336 MB 的 PDF 文件。此外,通过保持标准设置,Acrobat 会将图像拉伸到 A4 或 Letter 大小。相比之下,PDFJam 只是创建了一个 pdf,每个页面都适合 JPG 大小。

这显然是通过保持默认值,可能通过调整两个程序中的选项可以获得类似的输出。

jpeg2pdf

这是一个小型命令行工具,可以从 JPG 创建 PDF 文件,而无需重新压缩它们。

在这里获取:http: //jpeg2pdf.sourceforge.net/

特征

  • 将原始 JPG 存储在 PDF 中
  • 各种纸张尺寸选项(包括裁剪为图像尺寸)
  • 各种缩放选项(包括保留原始图像比例)

用法

jpeg2pdf *.jpg -o document.pdf

有关详细信息,请参阅自述文件和内置帮助。

平台

它说它是跨平台的,但我只在 Windows 上测试过。看起来您需要从类 Unix 系统上的 C 源代码编译它。