2011-07-27 50 views
5

Tôi đang sử dụng iText để trích xuất hình ảnh được nhúng và lưu chúng dưới dạng tệp riêng biệt. Các tệp .jpg và .png xuất hiện ok, nhưng tôi không thể trích xuất các hình ảnh tiff có mã hóa CCITTFaxDecode.Lưu tiff CCITTFaxDecode (từ trang PDF) bằng iText và Java

Có ai có cách tiết kiệm tệp tiff không?

Tôi tìm thấy một số mẫu mã C# sử dụng iTextSharp tại Extracting image from PDF with /CCITTFaxDecode filter Nó chỉ ra một thư viện tiff riêng biệt là cần thiết để viết kết quả. Theo bài viết đó, nén "CCITTFaxDecode" là Compression.CCITTFAX4 cho thư viện tiff.

Để sử dụng phương pháp của bài viết đó, tôi cần: 1. nhận thư viện tiff. API hình ảnh I/O Java sẽ cho phép bạn đọc và ghi tệp TIFF giữa các định dạng khác. BufferedImage image = ImageIO.read (tệp mới ("image.tif"));

  1. Tìm hiểu mã tương đương để lấy thuộc tính bitmap từ tệp PDF, ví dụ: pd.Get (PdfName.WIDTH) .ToString() (trong C#)

Trả lời

3

tôi trích ra một hình ảnh tiff từ pdf quét (có nghĩa là mỗi trang như hình ảnh) theo cách sau:

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

mã của 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) { 
    } 
} 
+0

hoạt động tuyệt vời! vui vì tôi tình cờ gặp bài đăng này! cảm ơn!! – skel625

Các vấn đề liên quan