使用iText和Java保存来自PDF页面的CCITTFaxDecode tiff文件

5

我正在使用iText提取嵌入式图像并将它们保存为单独的文件。.jpg和.png文件可以正常输出,但我无法提取具有CCITTFaxDecode编码的tiff图像。

有没有人知道如何保存tiff文件?

我在Extracting image from PDF with /CCITTFaxDecode filter找到了一些使用iTextSharp的示例C#代码。它表明需要一个单独的tiff库来写出结果。根据该文章,“CCITTFaxDecode”压缩对于tiff库来说是Compression.CCITTFAX4。

要使用该文章的方法,我需要:

  1. 获取一个tiff库。Java Image I/O API允许您读取和写入TIFF文件以及其他格式。BufferedImage image = ImageIO.read(new File("image.tif"));
  2. 查找从PDF获取位图属性的代码等效项,例如:pd.Get(PdfName.WIDTH).ToString()(这是在C#中)
1个回答

4

我是这样从扫描的pdf中提取出tiff图像的(即将每一页作为图像):

...
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) {
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接