Files
pdf/engine/src/qpdf/qpdf_resource_resolver.cpp
T
2026-06-22 15:18:47 +05:30

46 lines
1.3 KiB
C++

#include "qpdf_resource_resolver.hpp"
namespace pdfengine::qpdf_layer {
QpdfResourceResolver::QpdfResourceResolver(QPDFObjectHandle resourcesDict)
: resourcesDict_(resourcesDict) {}
ResolvedXObject QpdfResourceResolver::resolveXObject(const std::string& name) {
ResolvedXObject resolved;
resolved.type = XObjectType::Unknown;
if (!resourcesDict_.isDictionary()) return resolved;
if (!resourcesDict_.hasKey("/XObject")) return resolved;
QPDFObjectHandle xobjectDict = resourcesDict_.getKey("/XObject");
if (!xobjectDict.isDictionary()) return resolved;
std::string key = name;
if (!key.empty() && key[0] != '/') {
key = "/" + key;
}
if (!xobjectDict.hasKey(key)) return resolved;
QPDFObjectHandle xobj = xobjectDict.getKey(key);
if (!xobj.isStream()) return resolved;
QPDFObjectHandle streamDict = xobj.getDict();
if (streamDict.hasKey("/Subtype")) {
std::string subtype = streamDict.getKey("/Subtype").getName();
if (subtype == "/Image") {
resolved.type = XObjectType::Image;
} else if (subtype == "/Form") {
resolved.type = XObjectType::Form;
} else if (subtype == "/Pattern") {
resolved.type = XObjectType::Pattern;
}
}
resolved.object = xobj;
return resolved;
}
}