【问题标题】:Using Ghostscript to convert JPEG to PDF使用 Ghostscript 将 JPEG 转换为 PDF
【发布时间】:2011-05-16 01:22:37
【问题描述】:

我应该传递哪些参数?我使用的 Ghostscript 版本是 8.71。

【问题讨论】:

  • @RobertFleming 这在 2020 年似乎不是真的。我刚读了viewjpeg.ps,它似乎做了一个简单的字节复制。它明确指出“带有 IJG JPEG v6 或更高版本的 Ghostscript 将解码渐进式 JPEG,但前提是您(...)启用该功能。”。

标签: ghostscript


【解决方案1】:

https://gitlab.mister-muffin.de/josch/img2pdf

如 PleaseStand 所述,GhostScript(编辑:v9.23 之前)将解码 JPEG 数据,产生generation loss,性能比 img2pdf 差“十到一百”倍。

编辑:Ghostscript 9.23 (2018-03-21) 添加了“JPEG Passthrough”功能,可解决生成损失/性能问题。

ImageMagick(即convert)还对图像进行解码和重新编码。

【讨论】:

  • 谢谢。使用任何其他方法都需要永远处理任何重要数量的图像。
  • GhostScript 9.50 似乎不再受此generation loss 的影响。
【解决方案2】:
gs \
 -dNOSAFER \
 -sDEVICE=pdfwrite \
 -o foo.pdf \
  /usr/local/share/ghostscript/8.71/lib/viewjpeg.ps \
 -c \(my.jpg\) viewJPEG

读取 my.jpg 并生成 foo.pdf。您必须找到安装 PostScript 程序的位置viewjpeg.ps

【讨论】:

【解决方案3】:

很长一段时间以来,我一直在使用 Henry 在一个简单的 Bash 脚本中给出的相同基本命令行,并进行了一些调整。

我的完整脚本使用修改后的命令将多个 JPEG 图像转换为多页 PDF:

gs \
 -sDEVICE=pdfwrite \
 -o foo.pdf \
  /usr/local/share/ghostscript/9.02/lib/viewjpeg.ps \
 -c "(1st.jpg)  viewJPEG showpage \
     (2nd.jpg)  viewJPEG showpage \
     (3rd.jpg)  viewJPEG showpage \
     (last.jpg) viewJPEG showpage"

它是这样称呼的:

jpegs2pdf.sh output.pdf file1.jpeg [file2.jpeg [file2.jpeg [...]]]

问题是这个命令将使用与 Ghostscript 相同的(默认)页面大小(通常是纵向模式下的 Letter 或 A4),并且每个 JPEG 图像都将被缩放以适应这个页面宽度和/或页面高度,放置在左下角。

我的脚本使每个 PDF 页面使用与页面的原始 JPEG 相同的页面尺寸。对于 JPEG 尺寸的自动发现,我使用 ImageMagick 的 identify 命令:

 identify -format "%[fx:(w)] %[fx:(h)]" some.jpeg

这是完整脚本的代码:

#!/bin/bash
#
#############################################################################
#  
#  Shellscript to convert a set of JPEG files to a multipage PDF.
#
#  Requirements: (1) Ghostscript needs to be installed on the local system.
#                (2) ImageMagick needs to be installed on the local system.
#
#  Usage:  jpegs2pdf.sh output.pdf file1.jpeg [file2.jpeg [file2.jpeg [...]]]
#
#  Copyright (c) 2007, <pipitas@gmail.com>
#                Use, distribute and modify without any restrictions.
#
#  Versions:
#          v1.0.0, Jul 12 2007:  initial version
#          v1.0.1, Jan 07 2011:  set viewJPEG.ps path (self-compiled GS 9.02)
#
#############################################################################
    
outfile=$1
shift

param=""
for i in "$@" ; do
   dimension=$(identify -format "%[fx:(w)] %[fx:(h)]" "${i}")
   param="${param} <</PageSize [${dimension}]>> setpagedevice (${i}) viewJPEG showpage"
done

gs \
  -dNOSAFER \
  -sDEVICE=pdfwrite \
  -dPDFSETTINGS=/prepress \
  -o "$outfile" \
   /usr/local/share/ghostscript/9.02/lib/viewjpeg.ps \
  -c "${param}"

【讨论】:

  • 干草我使用了没有identify -format 的脚本并且生成了pdf,但是.jpg 图像在底部对齐,我怎样才能将它们带到pdf 页面的顶部。 identify -format "%[fx:(w)] %[fx:(h)]" some.jpeg 返回 null 所以我不能使用它。
  • @run: 你在哪个操作系统上运行identifyidentify -version 告诉你什么?你知道你也可以手动使用identify some.jpeg,它将返回一条以像素为单位指示JPEG的WxH尺寸的行,然后你可以使用它手动插入命令行......
  • unix。我通过dimension=$(identify -format "%w %h" "${x}") 实现了它,但除了使用width and height 将图像设置在页面顶部而不是底部之外,还有其他方法吗?如果我能获得任何链接以获取有关此方面的良好文档,我会很高兴。
  • @run:你还是没有告诉identify -version的输出。
  • @run:不行,只能一口气把图片拉到左下角。但是,您成功地将图像放置在 PDF 页面上之后,您可以使用第二步 gs 命令行来移动图像。这就是为什么我写 '...脚本使每个 PDF 页面使用与页面的原始 JPEG 相同的页面尺寸'
【解决方案4】:

在某些 Linux 发行版上,convert pic1.jpg pic2.jpg out.pdf 的工作结果喜忧参半

【讨论】:

  • 为我工作得很好。警告:非常消耗内存,合并 80 个 JPEG 文件需要 30 分钟在这里交换。
  • 这是因为 ImageMagick 完全解码和重新编码 JPEG 数据。这不仅速度慢且占用大量内存,还会导致generation loss。请参阅本页其他地方的 img2pdf。
  • 试试 GraphicsMagick。它是 ImageMagick 的一个分支,通常运行得更快。它缺少一些 IM 的功能,但大部分都兼容。
【解决方案5】:

我有 Ghostscript 版本 9.10,所以下面的命令 对我不起作用

/usr/local/share/ghostscript/9.02/lib/viewjpeg.ps

所以我修改了命令并编辑了行并使用了这个,它为我工作

viewjpeg.ps

所以新修改的命令如下:

gs \
     -sDEVICE=pdfwrite \
     -o foo.pdf \
      viewjpeg.ps \
     -c "(1st.jpg)  viewJPEG showpage \
         (2nd.jpg)  viewJPEG showpage \
         (3rd.jpg)  viewJPEG showpage \
         (last.jpg) viewJPEG showpage"

【讨论】:

    【解决方案6】:

    GhostScript 是 PostScript 解释器,因此它不直接支持 JPEG 输入,仅支持 JPEG 输出。也就是说,它确实支持 JPEG 解压缩(渐进式 JPEG 除外)。

    有一个名为jpeg2eps 的 PostScript 程序和随附的 shell 脚本可用于利用这一点。要获得 PDF,大多数系统都有脚本 pstopdf 可供使用,它通过 GhostScript 运行每个输入文件(您将使用 jpeg2eps 脚本的输出)。

    【讨论】:

      猜你喜欢
      • 2015-02-28
      • 2021-01-01
      • 2015-11-08
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 2013-12-27
      • 2011-07-03
      • 1970-01-01
      相关资源
      最近更新 更多