补充阅读:

补充阅读:

当我使用以下命令将 pdf 文件转换为一堆 jpg 文件时

convert -quality 100 file.pdf page_%04d.jpg

我有明显的质量损失。

但是,如果我执行以下操作,则不会出现(明显的)质量损失:

启动 gscan2pdf,选择文件 -> 导入(然后选择 file.pdf)。然后进入gscan2pdf的临时目录。有许多 pnm 文件(pdf 文件的每一页一个)。现在我做

  for file in *.pnm; do            
  convert $file $file.jpg done

生成的 jpg 文件(大致)与原始 pdf 具有相同的质量(这就是我想要的)。

现在我的问题是,是否有一种简单的命令行方法可以将 pdf 文件转换为一堆 jpg 文件,而不会造成明显的质量损失? (上面的解决方案过于复杂且耗时)。

答案1

目前尚不清楚“质量损失”是什么意思。这可能意味着很多不同的事情。您可以发布一些示例来说明吗?也许从质量差和质量好的版本中剪切出相同的部分(作为 PNG 以避免进一步的质量损失)。

也许您需要使用-density更高的 dpi 进行转换:

convert -density 300 file.pdf page_%04d.jpg

(如果需要,您可以在前面添加-units PixelsPerInch-units PixelsPerCentimeter。我的副本默认为 ppi。)

更新: 正如您所指出的,gscan2pdf(您使用它的方式)只是pdfimages(来自波普勒)。 pdfimages不会执行convert与将 PDF 作为输入时相同的操作。

convert获取 PDF,以某种分辨率渲染它,并使用生成的位图作为源图像。

pdfimages查看 PDF 中是否有嵌入的位图图像,并将每个图像导出到一个文件中。它只是忽略 PDF 中的任何文本或矢量绘图命令。

因此,如果您拥有的 PDF 只是一系列位图的包装,pdfimages则可以更好地提取它们,因为它可以为您提供原始大小的原始数据。您可能还想使用 选项-jpdfimages因为 PDF 可以包含原始 JPEG 数据。默认情况下,pdfimages将所有内容转换为 PNM 格式,并且转换 JPEG > PPM > JPEG 是一个有损过程。

因此,尝试一下

pdfimages -j file.pdf page

您可能需要也可能不需要遵循convertto.jpg步骤(取决于 PDF 使用的位图格式)。

我在自己根据 JPEG 图像序列制作的 PDF 上尝试了此命令。提取的 JPEG 与源图像逐字节相同。您无法获得比这更高的质量。

答案2

convert不适合我。然而,这个 ( pdftoppm) 工作得很好。以下每个命令都将确保“images”目录存在,如果不存在则创建它,并将生成的图像存储到该目录中。

1200 分辨率

mkdir -p images && pdftoppm -jpeg -r 1200 mypdf.pdf images/pg

600 分辨率

mkdir -p images && pdftoppm -jpeg -r 600 mypdf.pdf images/pg

300 DPI(每页生成约 1MB 大小的文件)

mkdir -p images && pdftoppm -jpeg -r 300 mypdf.pdf images/pg

300 DPI,最小压缩/最高质量(每页生成约 2MB 大小的文件)

mkdir -p images && pdftoppm -jpeg -jpegopt quality=100 -r 300 mypdf.pdf images/pg

补充阅读:

  1. https://stackoverflow.com/questions/43085889/how-to-convert-a-pdf-into-jpg-with-commandline-in-linux/61700520#61700520
  2. https://stackoverflow.com/questions/6605006/convert-pdf-to-image-with-high-resolution/58795684#58795684
  3. https://askubuntu.com/questions/150100/extracting-embedded-images-from-a-pdf/1187844#1187844

答案3

正如学生的回答所说,pdfimages这是一个不错的选择。根据我的经验,无论您是否指定正确的 dpi,导出的质量都会很差gsconvert

但是,如果 pdf 每页有多个图层则pdfimages不起作用,并将图层提取为单独的图像,在这种情况下,最好是使用inskcape所看到的导出页面。

这是我使用的命令:

pdftk combined_to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {}  inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png

第一个命令分割所有页面,第二个命令逐页转换为 png。您可以保留它们 png 或将它们转换为 jpeg

ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 {}.jpg

pdfimagesgs和 ImageMagick相比convert,我发现inkscape的导出质量最好。

答案4

查看 gscan2pdf 源代码,我注意到它使用 pdfimages。所以pdfimages file.pdf page会导致page-001.ppm, page-002.ppm等等。

相关内容