9
我正在嘗試從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()==真,我只得到/長度和/過濾器和流大約只有100個字節長。沒有圖像被發現。
我的問題是正確的方法是以正確的順序從PDF文件中獲取所有圖像。
是的iText的PDXObjectImage一部分嗎?似乎無法找到它 –
@FilipeCorreia nratx忘了提及他轉向Apache PDFBox。 – matt
對於某些PDF文件,需要用'PDResources resources = page.findResources();' – Tim