Сохраните tiff CCITTFaxDecode (со страницы PDF), используя iText и Java - PullRequest
5 голосов
/ 28 июля 2011

Я использую iText для извлечения встроенных изображений и сохранения их в виде отдельных файлов.Файлы .jpg и .png выходят нормально, но я не могу извлечь изображения tiff с кодировкой CCITTFaxDecode.

У кого-нибудь есть способ сохранить файлы tiff?

Я нашел примерКод C #, который использует iTextSharp на Извлечение изображения из PDF с фильтром / CCITTFaxDecode Указывает, что для записи результатов требуется отдельная библиотека TIFF.Согласно этой статье, сжатие "CCITTFaxDecode" - это Compression.CCITTFAX4 для библиотеки tiff.

Чтобы использовать метод этой статьи, мне нужно: 1. получить библиотеку tiff.API ввода / вывода Java Image позволит вам читать и записывать файлы TIFF среди других форматов.BufferedImage image = ImageIO.read (новый файл ("image.tif"));

Найдите эквивалент кода для получения свойства растрового изображения из PDF, например: pd.Get (PdfName.WIDTH) .ToString () (который находится в C #)

1 Ответ

4 голосов
/ 30 сентября 2011

Я извлек изображение tiff из отсканированного файла PDF (то есть каждой страницы как изображения) следующим образом:

...
PdfReader reader = new PdfReader("source.pdf");
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
MyImageRenderListener listener = new MyImageRenderListener("destination.jpg");
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
parser.processContent(i, listener);
 }
...

код MyImageRenderListener.class:

class MyImageRenderListener implements RenderListener {
    protected String path = "";

    public MyImageRenderListener(String path) {
        this.path = path;
    }

    public void beginTextBlock() {
    }

    public void endTextBlock() {
    }

    public void renderImage(ImageRenderInfo renderInfo) {
        try {
            String filename;
            FileOutputStream os;
            PdfImageObject image = renderInfo.getImage();
            PdfName filter = (PdfName) image.get(PdfName.FILTER);

                   if (PdfName.CCITTFAXDECODE.equals(filter)) {
                      BufferedImage bufferedImage = image.getBufferedImage();
                  ImageIO.write(bufferedImage, "jpg", new FileOutputStream(filename));// save tif image as jpg


            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void renderText(TextRenderInfo renderInfo) {
    }
}
...