gpt4 book ai didi

c++ - 使用 podofo 从 pdf 页面中提取图像

转载 作者:行者123 更新时间:2023-11-28 05:13:25 26 4
gpt4 key购买 nike

我需要使用 podofo 从 pdf 文件中提取所有图像。从文件中提取所有图像效果很好。我为此使用了图像提取器示例。这会接收所有对象并迭代它们。但我需要遍历页面并检查页面上的图像对象。有人知道怎么做吗?

最佳答案

小 pig 背离 podofoimgextract,你可以迭代每个页面,获取页面资源对象,检查 XObject 或 Image,从这里开始,它几乎与中使用的代码完全相同图像提取实用程序。

for (int pageN = 0; pageN < document.GetPageCount(); pageN++) {
PdfPage* page = document.GetPage(pageN);
PdfDictionary resource = page->GetResources()->GetDictionary();

for (auto& k : resource.GetKeys()) {
if (k.first.GetName() == "XObject" || k.first.GetName() == "Image") {
if (k.second->IsDictionary()) {
auto targetDict = k.second->GetDictionary();
for (auto& r : k.second->GetDictionary().GetKeys()) {
// The XObject will usually contain indirect objects as it's values.
// Check for a reference
if (r.second->IsReference()) {
// Get the object that is being referenced.
auto target =
document.GetObjects().GetObject(r.second->GetReference());
if (target->IsDictionary()) {
auto targetDict = target->GetDictionary();
auto kf = targetDict.GetKey(PdfName::KeyFilter);
if (!kf)
continue;
if (kf->IsArray() && kf->GetArray().GetSize() == 1 &&
kf->GetArray()[0].IsName() &&
kf->GetArray()[0].GetName().GetName() == "DCTDecode") {
kf = &kf->GetArray()[0];
}
if (kf->IsName() && kf->GetName().GetName() == "DCTDecode") {
ExtractImage(target, true);
} else {
ExtractImage(target, false);
}
}
}
}
}
}
}
}

关于c++ - 使用 podofo 从 pdf 页面中提取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43128330/

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