//helper functions bool OXMLi_ListenerState_Image::addImage(const std::string & id) { UT_Error err = UT_OK; FG_ConstGraphicPtr pFG; OXMLi_PackageManager * mgr = OXMLi_PackageManager::getInstance(); UT_ConstByteBufPtr imageData = mgr->parseImageStream(id.c_str()); if (!imageData) return false; err = IE_ImpGraphic::loadGraphic(imageData, IEGFT_Unknown, pFG); if ((err != UT_OK) || !pFG) { UT_DEBUGMSG(("FRT:OpenXML importer can't import the picture with id:%s\n", id.c_str())); return false; } OXML_Document * doc = OXML_Document::getInstance(); if(!doc) return false; OXML_Image* img = new OXML_Image(); img->setId(id.c_str()); img->setGraphic(std::move(pFG)); OXML_SharedImage shrImg(img); return doc->addImage(shrImg) == UT_OK; }
UT_Error IE_Exp_OpenXML_Listener::addImages() { UT_Error err = UT_OK; const char* szName = NULL; std::string mimeType; const UT_ByteBuf* pByteBuf = NULL; UT_uint32 k = 0; while (pdoc->enumDataItems (k, 0, &szName, &pByteBuf, &mimeType)) { k++; if(!(szName && *szName && !mimeType.empty() && pByteBuf && pByteBuf->getLength())) { szName = NULL; mimeType.clear(); pByteBuf = NULL; continue; } if(!((mimeType == "image/png") || (mimeType == "image/jpeg") || (mimeType == "image/svg+xml"))) { // If you add a mime type, make sure to update the extension code in // PD_Document::getDataItemFileExtension() UT_DEBUGMSG(("OpenXML export: unhandled/ignored mime type: %s\n", mimeType.c_str())); szName = NULL; mimeType.clear(); pByteBuf = NULL; continue; } OXML_Image* image = new OXML_Image(); const OXML_SharedImage shared_image(image); image->setId(szName); image->setMimeType(mimeType); image->setData(pByteBuf); err = document->addImage(shared_image); if(err != UT_OK) return err; szName = NULL; mimeType.clear(); pByteBuf = NULL; } return UT_OK; }