gpt4 book ai didi

java - 如何以正确的顺序使用 iText 从 PDF 中提取图像?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:18 32 4
gpt4 key购买 nike

我正在尝试从 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 文件中获取所有图像的正确方法是什么。

最佳答案

我在别处找到了答案,即 iText 邮件列表。

以下代码适用于我 - 请注意我已切换到 PdfBox:

PDDocument document = null; 
document = PDDocument.load(inFile);
List pages = document.getDocumentCatalog().getAllPages();
Iterator iter = pages.iterator();
while (iter.hasNext()) {
PDPage page = (PDPage) iter.next();
PDResources resources = page.getResources();
Map pageImages = resources.getImages();
if (pageImages != null) {
Iterator imageIter = pageImages.keySet().iterator();
while (imageIter.hasNext()) {
String key = (String) imageIter.next();
PDXObjectImage image = (PDXObjectImage) pageImages.get(key);
image.write2OutputStream(/* some output stream */);
}
}
}

关于java - 如何以正确的顺序使用 iText 从 PDF 中提取图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7007917/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com