我需要一个 Java 库来将 PDF 转换为 TIFF 图像。PDF 是传真,我将转换为 TIFF,以便我可以在图像上进行条形码识别。谁能推荐一个好的免费开源库来将 PDF 转换为 TIFF?
9 回答
我不能推荐任何代码库,但使用 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 工作
我们有一个可以将 PDF 转换为 TIFF 的 SDK。渲染由 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 美元。
Here is a good article and wrapper classes for using GhostScript with 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;
}