5 votes

Enregistrer tiff CCITTFaxDecode (à partir d'une page PDF) en utilisant iText et Java

J'utilise iText pour extraire les images incorporées et les enregistrer dans des fichiers séparés. Les fichiers .jpg et .png s'en sortent bien, mais je ne peux pas extraire les images tiff qui ont le codage CCITTFaxDecode.

Quelqu'un a-t-il un moyen de sauvegarder les fichiers tiff ?

J'ai trouvé un exemple de code C# qui utilise iTextSharp à l'adresse suivante Extraction d'une image d'un PDF avec le filtre /CCITTFaxDecode Il indique qu'une bibliothèque tiff séparée est nécessaire pour écrire les résultats. Selon cet article, la compression "CCITTFaxDecode" est Compression.CCITTFAX4 pour la bibliothèque tiff.

Pour utiliser la méthode de cet article, il me faut : 1. obtenir une bibliothèque tiff. L'API Java Image I/O vous permettra de lire et d'écrire des fichiers TIFF parmi d'autres formats. BufferedImage image = ImageIO.read( new File( "image.tif" ) ) ;

  1. Trouvez l'équivalent du code pour obtenir la propriété du bitmap à partir du PDF, exemple : pd.Get(PdfName.WIDTH).ToString() (qui est en C#)

4voto

Mihai Points 343

J'ai extrait une image tiff d'un pdf scanné (c'est-à-dire que chaque page est une image) de la manière suivante :

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

code de 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) {
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X