Как извлечь изображения из PDF-файла с помощью iText в правильном порядке?

Я пытаюсь извлечь изображения из файла PDF. Я нашел в Интернете пример, который работал нормально:

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

Это дало мне все изображения, но изображения были в неправильном порядке. Моя следующая попытка выглядела так:

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
}

Хотя o.isStream () == true, я получаю только / Length и / Filter, а длина потока составляет всего около 100 байт. Никаких изображений не найдено. .

Мой вопрос: как правильно получить все изображения из файла PDF в правильном порядке.

9
задан nratx 10 August 2011 в 08:32
поделиться