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

有人可以保存tiff文件吗?

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

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

  • 找出与从PDF获取位图属性的代码等效的示例,例如:
    pd.Get(PdfName.WIDTH).ToString()(在C#中)
  • 最佳答案

    我以以下方式从扫描的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) {
        }
    }
    

    10-07 19:12
    查看更多