使用iText和Java保存tiff CCITTFaxDecode(来自PDF页面)

时间:2011-07-27 21:21:30

标签: itext extract tiff

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

有没有人有办法保存tiff文件?

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

要使用该文章的方法,我需要: 1.获得一个tiff库。   Java Image I / O API允许您以其他格式读取和写入TIFF文件。   BufferedImage image = ImageIO.read(new File(“image.tif”));

  1. 找出从PDF获取位图属性的等效代码,例如: pd.Get(PdfName.WIDTH).ToString()(在C#中)

1 个答案:

答案 0 :(得分: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) {
    }
}