【发布时间】:2025-12-27 18:05:12
【问题描述】:
我需要一个 Java 库来将 PDF 转换为 TIFF 图像。 PDF 是传真,我将转换为 TIFF,以便我可以在图像上进行条形码识别。任何人都可以推荐一个好的免费开源库来从 PDF 转换为 TIFF 吗?
【问题讨论】:
我需要一个 Java 库来将 PDF 转换为 TIFF 图像。 PDF 是传真,我将转换为 TIFF,以便我可以在图像上进行条形码识别。任何人都可以推荐一个好的免费开源库来从 PDF 转换为 TIFF 吗?
【问题讨论】:
我不能推荐任何代码库,但是使用 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 输出。
【讨论】:
免责声明:我为 Atalasoft 工作
We have an SDK that can convert PDF to TIFF。渲染由 Foxit 软件提供支持,该软件是一个非常强大和高效的 PDF 渲染器。
【讨论】:
我们在这里也进行转换 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 一样。
希望这会有所帮助,问候
【讨论】:
您可以使用 icepdf 库(Apache 2.0 许可)。 他们甚至提供了这个确切的用例作为他们的示例源代码之一: http://wiki.icesoft.org/display/PDF/Multi-page+Tiff+Capture
【讨论】:
也许不需要将 PDF 转换为 TIFF。传真很可能是 PDF 中的嵌入图像,因此您可以再次提取这些图像。这应该可以通过已经提到的 iText 库实现。
我不知道这是否比其他方法更容易。
【讨论】:
没有 Itext 不能将 PDF 转换为 Tiff。
但是,有一些商业图书馆可以做到这一点。 jPDFImages 是一个 100% 的 java 库,可以将 PDF 转换为 TIFF、JPEG 或 PNG 格式的图像(也许是 JBIG?我不确定)。它也可以反过来,从图像创建 PDF。一台服务器的起价为 300 美元。
【讨论】:
这是一篇很好的文章和包装类,用于将 GhostScript 与 C# .NET 结合使用...最终在生产中使用它
http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx
【讨论】:
我对 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;
}
【讨论】: