将pdf文件转换为tiff文件的最佳方法


73

我大约有1000个pdf文件,我需要将它们转换为300 dpi的tiff文件。做这个的最好方式是什么?如果有可以编写脚本的SDK,某物或工具,那将是理想的选择。


这是我使用的解决方案:[使用Xpdf的pdftoppm和LibTIFF的ppm2tiff和tiffcp的Pdf到Tiff(仅当多页时才可选)] [1] [1]:stackoverflow.com/a/12868254/551460
Ronald Wang

有完整的源代码示例的最终解决方案吗?也许使用powershell脚本
。.– Kiquenet

@Kiquenet我发布了一种使用Powershell的解决方案。看到下面...
gyurisc

1
使用Ghrostscript作为gs -q -dNOPAUSE -r300x300 -sDEVICE=tiff24nc -sOutputFile=output.tif input.pdf -c quit(在Windows上,命令是gswin32c)产生300x300 dpi和24位彩色图像
juanmirocks 2016年

将PDF文件转换为TIFF文件的最佳方法?确保:使用pdftoppm,如下所示:mkdir images && pdftoppm -tiff -r 300 mypdf.pdf images/pg。请参阅此处了解详细信息,用法和更多信息:askubuntu.com/questions/150100/…
加布里埃尔·斯台普斯

Answers:


66

使用Imagemagick或更好的Ghostscript。

http://www.ibm.com/developerworks/library/l-graf2/#N101C2提供了imagemagick的示例:

convert foo.pdf pages-%03d.tiff

http://www.asmail.be/msg0055376363.html包含一个ghostscript示例:

gs -q -dNOPAUSE -sDEVICE=tiffg4 -sOutputFile=a.tif foo.pdf -c quit

我将安装ghostscript并阅读gs的手册页,以查看需要哪些确切选项并进行实验。


2
据我所知,ghostscript的确非常好,据我所知imagemagick正在将ghostscript用于pdf操作。这个对吗?
gyurisc

这就是我所听到的,但是我不是ImageMagick内部专家;)
Aeon

2
imagemagick是否可以正确处理多页pdf-> tiff?
David Shaked

1
哇,ghostscript确实需要清理其命令行界面!
CpILL

imagemagick无需配置即可正常运行。我无法ghostscript正确配置以获得高分辨率的彩色图像。
Seanny123

44

从命令行使用GhostScript,我过去使用过以下内容:

在Windows上:

gswin32c -dNOPAUSE -q -g300x300 -sDEVICE=tiffg4 -dBATCH -sOutputFile=output_file_name.tif input_file_name.pdf

在* nix上:

gs -dNOPAUSE -q -g300x300 -sDEVICE=tiffg4 -dBATCH -sOutputFile=output_file_name.tif input_file_name.pdf

对于大量文件,可以使用简单的批处理/ shell脚本来转换任意数量的文件...


3
+1。有用的命令。但是我的彩色数字是黑白输出的。知道为什么吗?
Faheem Mitha

6
-sDEVICE=tiffg4是黑白传真压缩模型。请参阅:pages.cs.wisc.edu/~ghost/doc/AFPL/8.00/Devices.htm#TIFF
HairyFotr 2012年

20
大多数情况下,您希望将pdf转换为300x300 dpi而不是300x300尺寸的TIFF图像。因此,将-g开关替换为-rgswin32c -dNOPAUSE -q -r300x300 ...
berezovskyi

5
谢谢@HairyFotr。对于其他访问者,您应该使用-sDEVICE=tiff24nc24位RGB或-sDEVICE=tiff12nc12位(每个通道分别为8/4位)。
naught101

18

我写了一些powershell脚本来浏览目录结构,并使用ghostscript将所有pdf文件转换为tiff文件。这是我的脚本:

$tool = 'C:\Program Files\gs\gs8.63\bin\gswin32c.exe'
$pdfs = get-childitem . -recurse | where {$_.Extension -match "pdf"}

foreach($pdf in $pdfs)
{

    $tiff = $pdf.FullName.split('.')[0] + '.tiff'
    if(test-path $tiff)
    {
        "tiff file already exists " + $tiff
    }
    else        
    {   
        'Processing ' + $pdf.Name        
        $param = "-sOutputFile=$tiff"
        & $tool -q -dNOPAUSE -sDEVICE=tiffg4 $param -r300 $pdf.FullName -c quit
    }
}

谢谢!!这真的帮助了我!
codekitty

2
7年后,这仍然会有所帮助!我只想补充说,没有PowerShell经验的人,您需要:1.编辑$ tool值以匹配系统上的路径和版本。2.打开PowerShell,然后cd到存储PDF的目录。3.将代码粘贴到PowerShell窗口中。我需要按Enter键几次才能使其运行。感谢gyurisc
Timothy

9

1)安装GhostScript

2)安装ImageMagick

3)创建“转换为TIFF.bat”(Windows XP,Vista,7)并使用以下行:

for %%f in (%*) DO "C:\Program Files\ImageMagick-6.6.4-Q16\convert.exe" -density 300 -compress lzw %%f %%f.tiff

将任意数量的单页PDF文件拖到该文件上会将它们转换为300 DPI的压缩TIFF。


需要GhostScript吗?如果仅安装ImageMagick?
Kiquenet

这工作得很好。非常感谢。
jsquaredz

6

使用python这就是我最终得到的

    import os
    os.popen(' '.join([
                       self._ghostscriptPath + 'gswin32c.exe', 
                       '-q',
                       '-dNOPAUSE',
                       '-dBATCH',
                       '-r300',
                       '-sDEVICE=tiff12nc',
                       '-sPAPERSIZE=a4',
                       '-sOutputFile=%s %s' % (tifDest, pdfSource),
                       ]))

1
通常,您需要为此使用子流程。os.popen被认为已弃用。语法几乎相同。
mlissner '16

4

PDF Focus .Net可以通过以下方式实现:

1. PDF到TIFF

SautinSoft.PdfFocus f = new SautinSoft.PdfFocus();    

string pdfPath = @"c:\My.pdf";

string imageFolder = @"c:\images\";

f.OpenPdf(pdfPath);

if (f.PageCount > 0)
{
    //Save all PDF pages to image folder as tiff images, 200 dpi
    int result = f.ToImage(imageFolder, "page",System.Drawing.Imaging.ImageFormat.Tiff, 200);
}

2. PDF转换为多页TIFF

//Convert PDF file to Multipage TIFF file

SautinSoft.PdfFocus f = new SautinSoft.PdfFocus();

string pdfPath = @"c:\Document.pdf";
string tiffPath = @"c:\Result.tiff";

f.OpenPdf(pdfPath);

if (f.PageCount > 0)
{
    f.ToMultipageTiff(tiffPath, 120) == 0)
    {
        System.Diagnostics.Process.Start(tiffPath);
    }
}   


3

必需的ghostscript和tiffcp在Ubuntu中测试

import os

def pdf2tiff(source, destination):
    idx = destination.rindex('.')
    destination = destination[:idx]
    args = [
    '-q', '-dNOPAUSE', '-dBATCH',
    '-sDEVICE=tiffg4',
    '-r600', '-sPAPERSIZE=a4',
    '-sOutputFile=' + destination + '__%03d.tiff'
    ]
    gs_cmd = 'gs ' + ' '.join(args) +' '+ source
    os.system(gs_cmd)
    args = [destination + '__*.tiff', destination + '.tiff' ]
    tiffcp_cmd = 'tiffcp  ' + ' '.join(args)
    os.system(tiffcp_cmd)
    args = [destination + '__*.tiff']
    rm_cmd = 'rm  ' + ' '.join(args)
    os.system(rm_cmd)    
pdf2tiff('abc.pdf', 'abc.tiff')



2

也许也试试这个?PDF焦点

.Net库使您可以解决问题:)

此代码将有所帮助(在C#中将1000个PDF文件转换为300-dpi的TIFF文件):

    SautinSoft.PdfFocus f = new SautinSoft.PdfFocus();

    string[] pdfFiles = Directory.GetFiles(@"d:\Folder with 1000 pdfs\", "*.pdf");
    string folderWithTiffs = @"d:\Folder with TIFFs\";

    foreach (string pdffile in pdfFiles)
    {
        f.OpenPdf(pdffile);

        if (f.PageCount > 0)
        {
            //save all pages to tiff files with 300 dpi
            f.ToImage(folderWithTiffs, Path.GetFileNameWithoutExtension(pdffile), System.Drawing.Imaging.ImageFormat.Tiff, 300);
        }
        f.ClosePdf();
    }

2

https://pypi.org/project/pdf2tiff/

您还可以使用pdf2ps,ps2image,然后使用其他实用程序将结果图像转换为tiff(我记得'paul'[paul-另一个图像查看器(显示PNG,TIFF,GIF,JPG等)])


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.