Сохраните tiff CCITTFaxDecode (со страницы PDF) с помощью iText и Java

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

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

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

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

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

person Mary    schedule 27.07.2011    source источник


Ответы (1)


Я извлек изображение в формате 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) {
    }
}
person Mihai    schedule 30.09.2011