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

。我想将它们合并为一个PDF文件。现代打印机只是做同样的事情,即封装并封装了一个JPG“流”,每页显示一个。

我试图通过选择所有图像并以PDF打印的简单图像查看器来实现。这导致再次重新压缩JPG中的所有图像,但有一些缺点:


如果我选择的JPG质量太差,则图像看起来超级cr脚,压缩后的图像会导致生成损失。
如果我选择接近100%的高质量JPG,以防止产生更多的世代损失,则输出PDF的文件大小将会很大。

这就是我的想法:

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

如果可以,我可以使用哪种软件来做到这一点?有什么东西像用于PDF的ffmpeg(我的头转到ffmpeg -c:v copy选项将流复制到另一个容器中)吗?也许可以使用Postscript解析器直接调用它,从而呈现一个jpg文件的文件夹和许多命令行选项?

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


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



问题可能出在我的图像查看器程序中,该程序以某种方式对JPG进行重新采样和重新处理,而不是直接在Adobe Acrobat Distiller中将其直接提供给他们。

我是否应该将文件拖放到Acrobat Application中? br />

评论

基于我在该主题上找到的内容:stackoverflow.com/questions/13618236/…我下载了imagemagick win64 exe版本,并尝试在包含约380个文件的文件夹中使用命令convert * .jpg file.pdf。一场噩梦,我在这台笔记本电脑上有16GB的RAM,但是convert.exe立即将它们填满! JPG的总文件大小为336 MB,以这种速度,我怀疑该程序只是在导入它们,而是应用了完全重新转换!也许可以在文档中进行“不重新采样/不进行转码”,但我还没有找到。

#1 楼

img2pdf

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

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

私人使用

有时,我需要自动转换高分辨率TIFF文件到单个PDF页面。我利用PowerShell脚本,通过使用.NET API将TIFF降级为JPEG,然后调用img2pdf CLI生成多个PDF。最终,使用pdftk将PDF与其他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:



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



img2pdf的作者josch可以接受任何对Windows内置通配符支持的拉取请求:https://gitlab.mister-muffin.de/josch/img2pdf/issues/25#note_122

(感谢user3450548提到了一次转换多个文件并在注释中共享其解决方案的潜在问题!)

评论


可以一次处理多个文件吗?如果我尝试使用类似img2pdf -o output.pdf文件夹/*.jpg的文件,则会抛出一些错误!我必须写一些批处理所有文件,然后将各种PDF与另一个实用程序一起加入?

–user3450548
2015年10月30日17:34

@ user3450548 img2pdf不支持通配符。幸运的是,如果使用PowerShell而不是cmd.exe,则只需键入./python -m img2pdf $(gci myFolder / *。jpg)-o out.pdf。

– ComFreek
15年10月30日在17:55

谢谢。 $(gci myFolder / *。jpg)应该为该目录中找到的每个文件自动重复路径,对吗?这样做不会输出可能在某个时候中断的超长命令吗?如果我想使用直接外壳,该怎么办? (* .jpg)中/ r%i的a是否执行python -m img2pdf -o%i.pdf%i,然后使用一些tool_for_join_pdf.exe文件夹/*.pdf?

–user3450548
15年10月30日在18:16

可能的工作流程可能是使用pdftk工具(例如pdftk.exe * .pdf cat输出Combine.pdf)将pdf文件加入。

–user3450548
2015年10月31日21:00

@ user3450548的确,您可以达到此MS文章有关cmd.exe命令行字符串限制的(最低)限制2047个字符)。感谢您的评论,我将不胜感激!

– ComFreek
15年11月3日,21:40

#2 楼

PDFJam

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

此脚本接受JPG和PNG图像,以及PDF文件,并将它们串联在一起。输入不会重新压缩,并且会嵌入到PDF流中。是命令行上第一个文件的名称:

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


平台



Windows
>
下载并安装Cygwin。确保选择XXX-joined.pdf软件包:


基于Linux的Arch发行版

使用XXX安装texlive-core。


基于Debian的(Ubuntu等)

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



评论


谢谢,我也找到了这个:gitlab.mister-muffin.de/josch/img2pdf/tree/master问题是我在Windows上,是否有机会找到其中之一的Windows命令行exe端口?不使用cygwin之类的东西?

–user3450548
2015年10月30日,0:10

好的,我设法使其在Windows上运行,因此我将共享安装详细信息以帮助其他用户。但是,我仍在寻找更多的Native Windows命令行程序。方法如下:在安装过程中(或通过再次重新运行安装程序进行下一步下一步)安装Cygwin(我使用过x64版本),在软件包选择中选择以下各项:texlive,texlive-collection-basic,texlive-建议使用collection-latex,texlive-collection-latex。完成此操作后,您可以下载PDFJam软件包并将其放入/ home目录,并记住编辑.bashrc文件。

–user3450548
2015年10月30日,0:12

通过在末尾添加export PATH = $ PATH:/ home / user / pdfjam / bin行来编辑.bashrc。此时,重新启动Cygwin终端,您可以使用baitisj在他的答案中描述的命令。

–user3450548
2015年10月30日0:14



在PDFJam网站上,他们还谈论了基于Java的Multivalent软件包,该软件包能够以某种方式处理PDF(他们说更为完善)。由于Windows上的PDFJam需要Cygwin和某些设置,Multivalent需要Java,并且如果未安装到Java扩展中,则至少应使用java -classpath /path/to/Multivalent.jar工具之类的命令行。但是要知道,Multivalent是否像我们希望的那样像PDFJam那样包含图像而无需重新压缩图像!也许我可以尝试向他们发送邮件并询问:)

–user3450548
2015年10月30日,0:48

@ user3450548-将平台要求添加到原始问题中可能会有所帮助:-)

–baitisj
2015年10月30日,下午3:24

#3 楼

Adobe Acrobat

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

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


免费
命令行
multiplatform


Adob​​e Acrobat本身允许将多个JPG文件显然连接在一起,而无需进行重新压缩。

该界面可以通过多种方式调用,我将向他们展示相应的图像。

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



通过在Adobe Acrobat Pro中单击创建按钮:



无论如何,Adobe Acrobat都会打开“合并文件”窗口,允许您选择要添加的文件或文件夹:



通过选择中号设置文件大小,如果使用默认选项(您未更改Adobe PDF Standard设置以其他方式覆盖它们),程序将输出包含JPG的单个PDF文件内部。

在我对385个336 MB磁盘空间的JPG文件进行测试时,pdf附带337 MB的文件,但增加了1MB的开销。零,生成336 MB PDF文件。同样,通过保持标准设置,Acrobat可以将图像拉伸到A4或Letter尺寸。相比之下,PDFJam只是创建了一个pdf,而每个页面都适合JPG大小。

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

#4 楼

jpeg2pdf
这是一个很小的命令行工具,可以从JPG创建PDF文件而无需重新压缩它们。
在这里获取它:http://jpeg2pdf.sourceforge.net/
功能

将原始JPG存储为PDFs
各种纸张尺寸选项(包括裁切到图像尺寸)
各种缩放比例选项(包括保留原始图像缩放比例)

用法
jpeg2pdf *.jpg -o document.pdf

有关更多信息,请参见自述文件和内置帮助。
平台
它是跨平台的,但我仅在Windows上进行了测试。看起来您需要在类似Unix的系统上从C源代码进行编译。

#5 楼

图像转换为PDF或XPS

(以前为JPEGtoPDF)

这是一个用VB.NET编写的Windows GUI应用程序。它并没有声称它在PDF输出中存储了原始JPG数据,但是当我对其进行测试时,它实际上保留了原始JPG数据。

在此处获取它:http:// compulsivecode。 com / Project_ImageToPDF.aspx

与jpeg2pdf相比,它可能比较慢。但是,不需要安装,而且使用起来似乎很简单,因此对于不熟悉命令行的人来说可能很有用。



评论


问题是..它是否重新压缩/重新编码?在这种情况下,答案是不可接受的。

–user3450548
16 Jun 26'13:29



@ user3450548,它并不声称它保留了原始的JPEG数据,但是当我对其进行测试(使用xpdfbin pdfimages -j命令提取JPG和Windows fc命令将它们与原始文件进行比较)时, PDF与原始文件相同。

–山姆
16年6月27日在0:37

谢谢你的建议;)

–user3450548
16年6月28日在17:51