int Binary_HdrFtrTableReader::ReadHdrFtrItem(BYTE type, long length, void* poResult) { int res = c_oSerConstants::ReadOk; if ( c_oSerHdrFtrTypes::HdrFtr_Content == type ) { Writers::HdrFtrItem* poHdrFtrItem = NULL; switch(nCurHeaderType) { case c_oSerHdrFtrTypes::HdrFtr_First:poHdrFtrItem = new Writers::HdrFtrItem(SimpleTypes::hdrftrFirst);break; case c_oSerHdrFtrTypes::HdrFtr_Even:poHdrFtrItem = new Writers::HdrFtrItem(SimpleTypes::hdrftrEven);break; case c_oSerHdrFtrTypes::HdrFtr_Odd:poHdrFtrItem = new Writers::HdrFtrItem(SimpleTypes::hdrftrDefault);break; } if(NULL != poHdrFtrItem) { if(nCurType == c_oSerHdrFtrTypes::Header) { m_oHeaderFooterWriter.m_aHeaders.push_back(poHdrFtrItem); poHdrFtrItem->m_sFilename = L"header" + std::to_wstring((int)m_oHeaderFooterWriter.m_aHeaders.size()) + L".xml"; } else { m_oHeaderFooterWriter.m_aFooters.push_back(poHdrFtrItem); poHdrFtrItem->m_sFilename = L"footer" + std::to_wstring((int)m_oHeaderFooterWriter.m_aFooters.size()) + L".xml"; } m_oFileWriter.m_pDrawingConverter->SetDstContentRels(); Binary_DocumentTableReader oBinary_DocumentTableReader(m_oBufferedStream, m_oFileWriter, poHdrFtrItem->Header, m_pComments); READ1_DEF(length, res, this->ReadHdrFtrItemContent, &oBinary_DocumentTableReader); OOX::CPath fileRelsPath = m_oFileWriter.m_oDocumentWriter.m_sDir + FILE_SEPARATOR_STR + L"word" + FILE_SEPARATOR_STR + L"_rels"+ FILE_SEPARATOR_STR + poHdrFtrItem->m_sFilename + L".rels"; m_oFileWriter.m_pDrawingConverter->SaveDstContentRels(fileRelsPath.GetPath()); } } else res = c_oSerConstants::ReadUnknown; return res; }
void FontTable::read(const OOX::CPath& oPath) { m_fonts.clear(); XmlUtils::CXmlNode oFonts; oFonts.FromXmlFile( oPath.GetPath(), true ); if ( _T("w:fonts") == oFonts.GetName() ) { XmlUtils::CXmlNodes oFontList; oFonts.GetNodes( _T("w:font"), oFontList ); for ( int nFontIndex = 0; nFontIndex < oFontList.GetCount(); ++nFontIndex ) { XmlUtils::CXmlNode oFontNode; if ( oFontList.GetAt( nFontIndex, oFontNode ) ) { Font oFont; oFont.fromXML( oFontNode ); m_fonts.push_back( oFont ); } } } }
void WordprocessingDocument::SaveDocument(bool &bMacros) { std::wstring pathWord = m_strOutputPath + FILE_SEPARATOR_STR + L"word" ; NSDirectory::CreateDirectory( pathWord ); if (bMacros && docFile->GetStorage()->isDirectory(L"Macros")) { std::wstring sVbaProjectFile = pathWord + FILE_SEPARATOR_STR + L"vbaProject.bin"; POLE::Storage *storageVbaProject = new POLE::Storage(sVbaProjectFile.c_str()); if ((storageVbaProject) && (storageVbaProject->open(true, true))) { docFile->GetStorage()->copy(0, L"Macros/", storageVbaProject, false); storageVbaProject->close(); delete storageVbaProject; RegisterDocumentMacros(); RegisterVbaProject(); //output_document->get_xl_files().add_vba_project(); } else bMacros = false; } else bMacros = false; if (!bMacros) { RegisterDocument(); } OOX::CContentTypes oContentTypes; OOX::CPath pathDocProps = m_strOutputPath + FILE_SEPARATOR_STR + _T("docProps"); NSDirectory::CreateDirectory(pathDocProps.GetPath()); OOX::CPath DocProps = std::wstring(_T("docProps")); OOX::CApp* pApp = new OOX::CApp(NULL); if (pApp) { std::wstring sApplication = NSSystemUtils::GetEnvVariable(NSSystemUtils::gc_EnvApplicationName); if (sApplication.empty()) sApplication = NSSystemUtils::gc_EnvApplicationNameDefault; pApp->SetApplication(sApplication); #if defined(INTVER) pApp->SetAppVersion(VALUE2STR(INTVER)); #endif pApp->SetDocSecurity(0); pApp->SetScaleCrop(false); pApp->SetLinksUpToDate(false); pApp->SetSharedDoc(false); pApp->SetHyperlinksChanged(false); pApp->write(pathDocProps + FILE_SEPARATOR_STR + _T("app.xml"), DocProps, oContentTypes); delete pApp; } OOX::CCore* pCore = new OOX::CCore(NULL); if (pCore) { pCore->SetCreator(_T("")); pCore->SetLastModifiedBy(_T("")); pCore->write(pathDocProps + FILE_SEPARATOR_STR + _T("core.xml"), DocProps, oContentTypes); delete pCore; } RegisterDocPr(); WritePackage(); //Write main content. (word directory) SaveToFile(pathWord, std::wstring( L"document.xml" ), DocumentXML ); SaveToFile(pathWord, std::wstring( L"fontTable.xml" ), FontTableXML ); SaveToFile(pathWord, std::wstring( L"styles.xml" ), StyleSheetXML ); SaveToFile(pathWord, std::wstring( L"footnotes.xml" ), FootnotesXML ); SaveToFile(pathWord, std::wstring( L"endnotes.xml" ), EndnotesXML ); SaveToFile(pathWord, std::wstring( L"numbering.xml" ), NumberingXML ); SaveToFile(pathWord, std::wstring( L"comments.xml" ), CommentsXML ); SaveToFile(pathWord, std::wstring( L"settings.xml" ), SettingsXML ); SaveToFile(pathWord, std::wstring( L"customizations.xml" ), CommandTableXML ); if (!ImagesList.empty()) { std::wstring pathMedia = pathWord + FILE_SEPARATOR_STR + L"media"; NSDirectory::CreateDirectory(pathMedia); int i = 1; for (std::list<ImageFileStructure>::iterator iter = ImagesList.begin(); iter != ImagesList.end(); ++iter) { unsigned char* bytes = NULL; bytes = new unsigned char[iter->data.size()]; if (bytes) { copy(iter->data.begin(), iter->data.end(), bytes); if (Global::msoblipDIB == iter->blipType) {//user_manual_v52.doc std::wstring file_name = pathMedia + FILE_SEPARATOR_STR + L"image" + FormatUtils::IntToWideString(i++); iter->blipType = ImageHelper::SaveImageToFileFromDIB(bytes, iter->data.size(), file_name); } else { SaveToFile(pathMedia, std::wstring(L"image" ) + FormatUtils::IntToWideString(i++) + iter->ext, (void*)bytes, (unsigned int)iter->data.size()); } RELEASEARRAYOBJECTS(bytes); } } } if (!OleObjectsList.empty()) { std::wstring pathObjects = pathWord + FILE_SEPARATOR_STR + L"embeddings" ; NSDirectory::CreateDirectory( pathObjects ); int i = 1; for (std::list<OleObjectFileStructure>::iterator iter = OleObjectsList.begin(); iter != OleObjectsList.end(); ++iter) { std::wstring fileName = pathObjects + FILE_SEPARATOR_STR + L"oleObject" + FormatUtils::IntToWideString(i++) + iter->ext; if (!iter->data.empty()) { SaveEmbeddedObject(fileName, *iter); } else { SaveOLEObject( fileName, *iter ); } } } int headersCount = 0; int footersCount = 0; for (std::list<std::wstring>::iterator iter = HeaderXMLList.begin(); iter != HeaderXMLList.end(); ++iter) { SaveToFile(pathWord, ( std::wstring( L"header" ) + FormatUtils::IntToWideString(++headersCount) + std::wstring( L".xml" ) ), *iter); } for (std::list<std::wstring>::iterator iter = FooterXMLList.begin(); iter != FooterXMLList.end(); ++iter) { SaveToFile(pathWord, ( std::wstring( L"footer" ) + FormatUtils::IntToWideString(++footersCount) + std::wstring( L".xml" ) ), *iter); } }