#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; } }