使用Ghostscript将TIFF转换为PDF

7

你能告诉我如何使用Ghostscript或Postscript将TIFF转换为PDF吗?

我尝试使用以下命令:

gswin32c.exe -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=o.pdf test.tif

但它无法正常工作。

它会产生一个错误:

GPL Ghostscript 9.06 (2012-08-08)
Copyright (C) 2012 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Error: /undefined in II*
Operand stack:
Execution stack: %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-- Dictionary stack: --dict:1169/1684(ro)(G)-- --dict:0/20(G)-- --dict:77/200(L)-- Current allocation mode is local Current file position is 4 GPL Ghostscript 9.06: Unrecoverable error, exit code 1

2
虽然可以让 gs 实现这个功能很不错,但是 tiff2pdf(http://remotesensing.org/libtiff/)或 tifftopnm,pnmtops (netpbm.sourceforge.net/)可能更可取、更稳健、更快速。 - agentp
6个回答

10

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 

1
tiff2pdf(0.40.0)非常有限 - 它无法处理某些奇特的TIFF图像,尤其是包含JPEG编码样本的TIFF图像。它会在不发出任何错误警告的情况下破坏图像并生成一个有效的PDF文件。此前的版本更加糟糕。 - jbarlow
@jbarlow:我的libtiff/tiff2pdf版本是4.0.6(但你指出它的限制是正确的--任何软件都有限制;你必须通过尝试+测试自己找出它是否涉及到你自己的实际使用情况...) - Kurt Pfeifle
1
对于 Debian / Ubuntu 等操作系统,该软件包名为 libtiff-tools。 - scoobydoo

9
Ghostscript可以读取PDF和PostScript格式的文件,但不能读取图片格式,特别是TIFF格式。然而,PostScript是一种编程语言,所以完全有可能编写一个PostScript程序来读取TIFF文件(Ghostscript提供的viewgif.ps和viewjpeg.ps程序可以用于GIF和JPEG格式)。我有一个程序可以做到这一点,但只能做到某个程度,并且已经在comp.lang.postscript留言板上发布了几次。它有点大(33Kb),如果你感兴趣,我可以通过电子邮件给你一份副本。

3
发现了一个链接(https://groups.google.com/d/msg/comp.lang.postscript/xLMTVNzGNXQ/g7gItvNwPEIJ),使用了有趣的搜索关键词“ken read tiff”。 做得很好!+1 - luser droog
那个版本的代码中有一些错误,如果有人感兴趣,我很乐意提供当前版本。但请注意实现中存在已知的限制(请参见FIXMEs),我不能提供任何保证或承诺支持该程序。最好使用一些体面的图像应用程序来完成这项工作,这只是一个智力练习(正如我在comp.lang.postscript中所说)。 - KenS
明白了。但是看到专业的代码,可以将自己的代码与之比较,总是很不错的。 :) - luser droog
@KenS 你好,我的理解是,首先我们需要使用任何后置脚本将tif转换为pdf,然后以该pdf作为输入,我们需要在ghostscript中压缩pdf。这正确吗? - User09111993
很抱歉,我不知道你在这里问什么。这个问题是关于使用Ghostscript读取TIFF文件的,你可以编写一个PostScript程序来实现(不是“任何PostScript”,而是专门编写用于完成该任务的PostScript程序)。Ghostscript不会“压缩”PDF文件。 - KenS

4
使用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的“单个zip中编译的二进制文件”中获取2015年1月32位稳定版这里,解压缩并从SDKShell.bat启动。


可以运行,但是GDAL倾向于删除压缩。 - jbarlow
@jbarlow 压缩需要明确指定,原本为了清晰起见而省略。我会添加另一个例子。 - matt wilkie

2
到目前为止我使用过的最好的工具是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。
安装步骤:
下载32位的Irfanview。并不是所有插件都适用于64位版本,所以我使用了32位版本。
然后下载Irfanview的插件包并安装。
然后打开Irfanview,并需要定义IMPdf插件(仅限旧版32位插件)或较新的PDF插件的设置,方法是转到“文件” >> “批量转换/重命名”。
批量转换/重命名窗口中的设置对每个后续程序执行都有效,因为它们存储在Irfanview INI文件中。
单击“输出格式”,然后选择PDF。
然后单击“选项”按钮。这将允许您控制当将输入的TIFF文件转换为PDF时会发生什么。
然后尝试手动使用Irfanview处理几个TIFF文件,以确保输出是所需的。
然后您可以使用程序自动化它...

0
我使用Imagick将Tiff文件转换为Pdf文件。
代码:
$document = new Imagick(test.tiff); 

$document->setImageFormat("pdf");

$document->writeImages("test.pdf", true);

-5

我使用Java在Ubuntu上,通过GhostscriptPDF文件转换为Tiff文件
以下是代码片段:

String convertCommand = "gs -dNOPAUSE -q -sDEVICE=tiff24nc -sCompression=lzw -dBATCH -sOutputFile=" + outputFile + " " + sourceFile;
Runtime rt = Runtime.getRuntime();
Process 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


楼主想要将TIFF转换为PDF。你的回答与此无关:它涉及将PDF转换为TIFF。 - Kurt Pfeifle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接