Estoy tratando de extraer imágenes de un archivo PDF. He encontrado un ejemplo en la web, que funcionó bien:¿Cómo extraer imágenes de un PDF con iText en el orden correcto?
PdfReader reader;
File file = new File("example.pdf");
reader = new PdfReader(file.getAbsolutePath());
for (int i = 0; i < reader.getXrefSize(); i++) {
PdfObject pdfobj = reader.getPdfObject(i);
if (pdfobj == null || !pdfobj.isStream()) {
continue;
}
PdfStream stream = (PdfStream) pdfobj;
PdfObject pdfsubtype = stream.get(PdfName.SUBTYPE);
if (pdfsubtype != null && pdfsubtype.toString().equals(PdfName.IMAGE.toString())) {
byte[] img = PdfReader.getStreamBytesRaw((PRStream) stream);
FileOutputStream out = new FileOutputStream(new File(file.getParentFile(), String.format("%1$05d", i) + ".jpg"));
out.write(img);
out.flush();
out.close();
}
}
Eso me dio todas las imágenes, pero las imágenes fueron en el orden equivocado. Mi siguiente intento se veía así:
for (int i = 0; i <= reader.getNumberOfPages(); i++) {
PdfDictionary d = reader.getPageN(i);
PdfIndirectReference ir = d.getAsIndirectObject(PdfName.CONTENTS);
PdfObject o = reader.getPdfObject(ir.getNumber());
PdfStream stream = (PdfStream) o;
// rest from example above
}
Aunque o.isStream() == true, solo me dan/Longitud y/filtro y la corriente es de sólo 100 bytes de longitud. No se encuentra ninguna imagen en absoluto.
Mi pregunta sería cuál sería la forma correcta de obtener todas las imágenes de un archivo PDF en el orden correcto.
Es parte PDXObjectImage de iText también? parece que no puede encontrarlo –
@FilipeCorreia nratx olvidó mencionar que cambió a Apache PDFBox. – matt
Para algunos archivos PDF, la línea 'PDResources resources = page.getResources();' deberá reemplazarse por 'PDResources resources = page.findResources();' – Tim