将PDF转换为TIFF的好库?

时间:2008-12-10 15:53:42

标签: java pdf tiff

我需要一个Java库来将PDF转换为TIFF图像。 PDF是传真,我将转换为TIFF,以便我可以在图像上进行条形码识别。有人可以推荐一个好的免费开源库,用于从PDF转换为TIFF吗?

9 个答案:

答案 0 :(得分:5)

我不推荐使用任何代码库,但使用GhostScript将PDF转换为位图格式很容易。我个人使用下面的脚本(也使用netpbm实用程序)将PDF的第一个页面转换为JPEG缩略图:

#!/bin/sh

/opt/local/bin/gs -q -dLastPage=1 -dNOPAUSE -dBATCH -dSAFER -r300 \
    -sDEVICE=pnmraw -sOutputFile=- $* |
    pnmcrop |
    pnmscale -width 240 |
    cjpeg

您可以使用-sDEVICE=tiff...从GhostScript获取各种TIFF子格式的直接TIFF输出。

答案 1 :(得分:5)

免责声明:我在Atalasoft工作

We have an SDK that can convert PDF to TIFF。该渲染由Foxit软件提供支持,该软件是一个非常强大和高效的PDF渲染器。

答案 2 :(得分:3)

我们这里也做转换PDF - > G3 tiffs高低分辨率。根据我的经验,您可以拥有的最佳工具是Adobe PDF SDK,唯一的问题是它的疯狂价格。所以我们不使用它。

对我们来说最好的是 ghostscript ,最后版本非常强大,并且能够正确呈现大多数pdf。我们有很多人在白天来。在生产中,使用gsdll32.dll完成转换;但如果您想尝试使用以下命令行:

gswin32c -dNOPAUSE -dBATCH -dMaxStripSize=8192 -sDEVICE=tiffg3 -r204x196 -dDITHERPPI=200 -sOutputFile=test.tif prefix.ps test.pdf

它会将您的PDF转换为高分辨率G3 TIFF。和prefix.ps代码在这里:

<< currentpagedevice /InputAttributes get
0 1 2 index length 1 sub {1 index exch undef } for
/InputAttributes exch dup 0 <</PageSize [0 0 612 1728]>> put
/Policies << /PageSize 3 >> >> setpagedevice
关于这个sdk的另一件事是它是开源的;你得到它的c和ps(postscript)源代码。此外,如果您使用其他工具检查他们有什么样的引擎来支持pdf渲染,可能会发生他们正在使用gs;比如LeadTools。

希望这有帮助,尊重

答案 3 :(得分:3)

您可以使用icepdf库(Apache 2.0许可证)。 他们甚至提供这个确切的用例作为他们的示例源代码之一: http://wiki.icesoft.org/display/PDF/Multi-page+Tiff+Capture

答案 4 :(得分:1)

将PDF转换为TIFF可能不是必需的。传真很可能是PDF中的嵌入图像,因此您可以再次提取这些图像。对于已经提到的iText库,这应该是可能的。

我不知道这是否比其他方法更容易。

答案 5 :(得分:1)

答案 6 :(得分:0)

没有Itext无法将PDF转换为Tiff。

但是,有商业图书馆可以做到这一点。 jPDFImages是一个100%的java库,可以将PDF转换为TIFF,JPEG或PNG格式的图像(也许是JBIG?我不确定)。它也可以反过来,从图像创建PDF。服务器的起价为300美元。

答案 7 :(得分:0)

这是一篇很好的文章和包装类,用于在C#.NET中使用GhostScript ...最终在生产中使用它

http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx

答案 8 :(得分:-1)

我对iText有一些很好的经验(现在,我使用的是5.0.6版本),这是tiff转换成pdf的代码:

private static String convertTiff2Pdf(String tiff) {

    // target path PDF
    String pdf = null;

    try {

        pdf = tiff.substring(0, tiff.lastIndexOf('.') + 1) + "pdf";

        // New document A4 standard (LETTER)
        Document document = new Document(PageSize.LETTER, 0, 0, 0, 0);

        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(pdf));
        int pages = 0;
        document.open();
        PdfContentByte cb = writer.getDirectContent();
        RandomAccessFileOrArray ra = null;
        int comps = 0;
        ra = new RandomAccessFileOrArray(tiff);
        comps = TiffImage.getNumberOfPages(ra);

        // Convertion statement
        for (int c = 0; c < comps; ++c) {
            Image img = TiffImage.getTiffImage(ra, c + 1);
            if (img != null) {
                System.out.println("page " + (c + 1));
                img.scalePercent(7200f / img.getDpiX(), 7200f / img.getDpiY());
                document.setPageSize(new Rectangle(img.getScaledWidth(), img.getScaledHeight()));
                img.setAbsolutePosition(0, 0);
                cb.addImage(img);
                document.newPage();
                ++pages;
            }
        }

        ra.close();
        document.close();

    } catch (Exception e) {
        logger.error("Convert fail");
        logger.debug("", e);
        pdf = null;
    }

    logger.debug("[" + tiff + "] -> [" + pdf + "] OK");
    return pdf;

}