【问题标题】:Save tiff CCITTFaxDecode (from PDF page) using iText and Java使用 iText 和 Java 保存 tiff CCITTFaxDecode(来自 PDF 页面)
【发布时间】:2011-07-27 21:21:30
【问题描述】:

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

有没有人可以保存 tiff 文件?

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

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

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

【问题讨论】:

    标签: itext extract tiff


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      相关资源
      最近更新 更多