2011-07-27 13 views
5

Używam iText do wyodrębniania osadzonych obrazów i zapisywania ich jako oddzielnych plików. Pliki .jpg i .png wyglądają dobrze, ale nie mogę wyodrębnić obrazów tiff, które mają kodowanie CCITTFaxDecode.Zapisz tiff CCITTFaxDecode (ze strony PDF) za pomocą iText i Java

Czy ktoś ma sposób zapisywania plików TIFF?

Znalazłem przykładowy kod C#, który używa iTextSharp przy Extracting image from PDF with /CCITTFaxDecode filter Wskazuje, że do zapisania wyników potrzebna jest osobna biblioteka tiff. Zgodnie z tym artykułem kompresja "CCITTFaxDecode" to Compression.CCITTFAX4 dla biblioteki tiff.

Aby użyć tej metody artykułu, potrzebuję: 1. Pobierz bibliotekę TIFF. Interfejs API obrazu Java I/O umożliwia odczytywanie i zapisywanie plików TIFF w innych formatach. Obraz z obrazu BufferedImage = ImageIO.read (nowy plik ("image.tif"));

  1. Sprawdzaj równowartość kodu dla uzyskania własności bitmapy jest z PDF, np: pd.Get (PdfName.WIDTH .ToString)() (który jest w C#)

Odpowiedz

3

ja wybiłem z zeskanowanego obrazu tiff pdf (czyli każda strona jako obraz) w następujący sposób:

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

kod 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

działa świetnie! cieszę się, że natknąłem się na ten post! dzięki!! – skel625

Powiązane problemy