使用 Ghostscript 将 TIFF 转换为 PDF
Posted
技术标签:
【中文标题】使用 Ghostscript 将 TIFF 转换为 PDF【英文标题】:Conversion of TIFF to PDF with Ghostscript 【发布时间】:2013-03-04 21:25:10 【问题描述】:您能告诉我如何使用 Ghostscript 或 Postscript 将 TIFF 转换为 PDF 吗?
我尝试使用这个命令:
gswin32c.exe -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=o.pdf test.tif
但它不起作用。
它会产生错误:
GPL Ghostscript 9.06 (2012-08-08) 版权所有 (C) 2012 Artifex Software, Inc。保留所有权利。 此软件不提供任何担保:有关详细信息,请参阅文件 PUBLIC。 错误:/未定义在 II* 操作数栈: 执行栈: %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1910 1 3 %oparray_pop 1909 1 3 % oparray_pop 1893 1 3 %oparray_pop 1787 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- 字典栈: --dict:1169/1684(ro)(G)-- --dict:0/20(G)-- --dict:77/200(L)-- 当前分配模式是本地的 当前文件位置是 4 GPL Ghostscript 9.06:不可恢复的错误,退出代码 1
【问题讨论】:
虽然很高兴看到 gs 可以做到这一点,但 tiff2pdf (remotesensing.org/libtiff) 或 tifftopnm,pnmtops (netpbm.sourceforge.net/) 可能是可取的、更强大、更快的解决方案 【参考方案1】:Ghostscript 读取 PDF 和 PostScript 作为输入,它不读取图像格式,尤其是不读取 TIFF。但是 PostScript 是一种编程语言,因此完全可以编写 PostScript 程序来读取 TIFF 文件(Ghostscript 提供的 viewgif.ps 和 viewjpeg.ps 程序对 GIF 和 JPEG 格式执行此操作)
在某种程度上,我确实有一个程序可以做到这一点,并且已经在 comp.lang.postscript 上发布了几次。在这里分享有点大(33Kb),但如果您有兴趣,我可以通过电子邮件发送给您。
【讨论】:
使用有趣的搜索字符串“ken read tiff”找到了一个链接 (groups.google.com/d/msg/comp.lang.postscript/xLMTVNzGNXQ/…)。非常好的工作! +1 该版本的代码存在一些错误,如果有人感兴趣,我很乐意提供当前版本。但请注意,实施存在已知限制(请参阅 FIXME),我无法提供任何保证或承诺支持该程序。使用一些像样的图像应用程序来完成这项工作也可能更好,这(正如我在 comp.lang.postscript 中所说)只是一种智力练习。 明白。但是看到看起来很专业的代码,将自己的粘土雕塑与之进行比较总是很高兴的。 :) @KenS HI,我的理解是,首先我们需要使用任何 postscript 将 tif 转换为 pdf,然后使用该 pdf 作为输入,我们需要在 ghostscript 中压缩 pdf。这正确吗? 对不起,我不知道你在这里问什么。这个问题是关于使用 Ghostscript 读取 TIFF 文件的,您可以通过编写 PostScript 程序(不是“任何 PostScript”,而是专门为完成这项工作而编写的 PostScript 程序)来完成。 Ghostscript 不会“压缩”PDF 文件。【参考方案2】:libtiff
软件包(适用于所有主要操作系统平台)附带一个名为 tiff2pdf
的命令行工具。
$ tiff2pdf -h
LIBTIFF, Version 4.0.3
Copyright (c) 1988-1996 Sam Leffler
Copyright (c) 1991-1996 Silicon Graphics, Inc.
usage: tiff2pdf [options] input.tiff
options:
-o: output to file name
-j: compress with JPEG
-z: compress with Zip/Deflate
-q: compression quality
-n: no compressed data passthrough
-d: do not compress (decompress)
-i: invert colors
-u: set distance unit, 'i' for inch, 'm' for centimeter
-x: set x resolution default in dots per unit
-y: set y resolution default in dots per unit
-w: width in units
-l: length in units
-r: 'd' for resolution default, 'o' for resolution override
-p: paper size, eg "letter", "legal", "A4"
-F: make the tiff fill the PDF page
-f: set PDF "Fit Window" user preference
-e: date, overrides image or current date/time default, YYYYMMDDHHMMSS
-c: sets document creator, overrides image software default
-a: sets document author, overrides image artist default
-t: sets document title, overrides image document name default
-s: sets document subject, overrides image image description default
-k: sets document keywords
-b: set PDF "Interpolate" user preference
-h: usage
因此,获取 PDF 的简单命令是:
$ tiff2pdf -o output.pdf -p A4 -F test.tif
【讨论】:
tiff2pdf (0.40.0) 非常有限 - 它不能处理某些奇异的 TIFF,尤其是包含 JPEG 编码样本的 TIFF。它会默默地破坏图像并呈现有效的 PDF。早期版本更糟糕。 @jbarlow:我的 libtiff/tiff2pdf 版本是 4.0.6(但你指出它的局限性是正确的——你使用的 ANY 软件存在局限性;你必须通过尝试+测试来了解它是否涉及您自己的实际用例......) 对于 Debian / Ubuntu 等,软件包是 libtiff-tools【参考方案3】:使用gdal_translate 实用程序。它专为地理空间光栅图像而设计,但它并不关心它是否只是普通图像。
gdal_translate -of pdf \path\to\someimage.tif test.pdf
有关 geo-pdf 驱动程序及其选项的其他信息: http://www.gdal.org/frmt_pdf.html
应用的默认压缩是 DEFLATE,这很好,因为它是无损的,但不会产生非常小的文件。通常使用 PREDICTOR 和 TILED 选项可以增加压缩率(但并非总是使用您的数据进行测试)。
gdal_translate -of pdf ^
--config COMPRESS=DEFLATE --config PREDICTOR=2 --config TILED=YES ^
in.tif deflate.pdf
对于最小的文件,请使用 JPEG。对于最小和最小损耗的组合使用 JPEG2000,但在客户端的 pdf 阅读器中进行测试,因为支持不普遍(最近的 Adobe Reader 很好)。
gdal_translate -of pdf -co compress=jpeg -co jpeg_quality=85 ^
inimage.tif outdoc.pdf
gdal_translate -of pdf -co compress=jpeg2000 ...
-co
是为了简洁,它可以与--config
互换。
第一个示例中的大写仅是约定,在命令行上无关紧要。
^
是用于禁止换行的 Windows 字符,当全部在一行时省略。
获取预构建的二进制文件: http://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries
如果您对地理信息系统一无所知,那么弄清楚要使用哪个分发包会有点麻烦。如果您只想将程序塞入某个地方并运行它,请从 GIS Internals,2015 年 1 月 32 位稳定版本 here 中获取 "compiled binaries in single zip",解压缩并从 SDKShell.bat
开始.
【讨论】:
有效,但 GDAL 倾向于消除压缩。 @jbarlow 压缩需要明确指示,为了清楚起见,最初省略。我再补充一个例子【参考方案4】:我使用 Imagick 将 Tiff 文件转换为 Pdf 文件
代码:
$document = new Imagick(test.tiff);
$document->setImageFormat("pdf");
$document->writeImages("test.pdf", true);
【讨论】:
【参考方案5】:到目前为止,我使用过的最好的工具是 Irfanview。它让我们可以制作一个非常模糊的 TIFF 文件版本,还可以让我们进行混合 TIFF 到 PDF 的转换,其中一些页面是灰度的,一些是彩色的,还有一些是 CCITT4 传真编码的。
我创建了一个 .NET 程序,该程序使用 Irfanview 使用此命令行转换了数百万个文档:
C:\Program Files (x86)\IrfanView\i_view32.exe TIFFFile.tiff /convert=OutputPDFFile.pdf /silent /cmdexit
.NET 程序本质上只是传递了 TIFF 输入和 PDF 输出文件的完整路径。
设置
下载 Irfanview 32bit。不是所有的插件都支持 64 位版本,所以我用的是 32 位的。
然后下载Irfanview的插件包并安装。
然后打开 Irfanview,您需要通过转到文件>>批量转换/重命名来定义 IMPdf 插件(仅限传统 32 位插件)或较新的 PDF 插件的设置。
批量转换/重命名窗口中的设置对程序的每次后续执行都有效,因为它们存储在 Irfanview INI 文件中。
点击输出格式,然后选择 PDF。
然后单击选项按钮。这将允许您控制输入 TIFF 文件在转换为 PDF 时会发生什么的参数。
然后尝试 irfanview 手动对几个 TIFF 文件执行此操作,以确保所需的输出。
然后您可以使用程序将其自动化...
【讨论】:
【参考方案6】:我通过 Ghostscript 在 ubuntu 上使用 Java 将 PDF 文件转换为 Tiff 文件。 sn-ps 代码:
String convertCommand = "gs -dNOPAUSE -q -sDEVICE=tiff24nc -sCompression=lzw -dBATCH -sOutputFile=" + outputFile + " " + sourceFile; 运行时 rt = Runtime.getRuntime(); 进程 pr = rt.exec(convertCommand); pr.waitFor();
如果您想要压缩,那么只需将命令替换为, String convertCommand = "gs -dNOPAUSE -q -sDEVICE=tifflzw -dBATCH -sOutputFile=" + outputFile + " " + sourceFile;
使用前请先安装 Ghostscript, 1. sudo apt-get install ghostscript libtiff-tools
【讨论】:
OP 想要转换 TIFF->PDF。您的回答是徒劳的:它涉及转换 PDF->TIFF。以上是关于使用 Ghostscript 将 TIFF 转换为 PDF的主要内容,如果未能解决你的问题,请参考以下文章
使用 Ghostscript 将 PDF 转换为 TIFF 时保留页面尺寸
如何使用 Ghostscript 将 DOCX 或 DOC 文件转换为 TIFF 格式?
使用 Ghostscript 将 PDF 转换为 TIFF 时未生成输出文件