Хорошая библиотека для преобразования PDF в TIFF?[закрыто]
Вопрос
Мне нужна библиотека Java для преобразования PDF-файлов в изображения в формате TIFF.PDF-файлы - это факсы, и я буду преобразовывать их в формат TIFF, чтобы затем можно было распознавать штрих-код на изображении.Кто-нибудь может порекомендовать хорошую бесплатную библиотеку с открытым исходным кодом для конвертации из PDF в TIFF?
Решение
Отказ от ответственности:Я работаю в Atalasoft
У нас есть SDK, который может конвертировать PDF в TIFF.Рендеринг осуществляется с помощью программного обеспечения Foxit, которое создает очень мощный и эффективный рендеринг PDF.
Другие советы
Я не могу рекомендовать какую-либо библиотеку кода, но 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...
чтобы получить прямой вывод TIFF в различных подформатах TIFF из GhostScript.
мы здесь также делаем конвертацию PDF -> G3 tiff с высоким и низким разрешением.По моему опыту, лучший инструмент, который у вас может быть, - это Adobe PDF SDK, единственная проблема с ним - его безумная цена.Поэтому мы им не пользуемся.
что у нас хорошо работает, так это призрачный скрипт, последние версии в значительной степени надежны и корректно отображают большинство 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.
Я не знаю, проще ли это, чем другой подход.
Взгляните на Apache PDFBox - Библиотека Java PDF
No 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;
}