源码版本:2.4.6
打开文件文件操作:
响应函数:UT_Error AP_Frame::loadDocument(const char * szFilename, int ieft, bool createNew)
加载操作:loadDocument::errorCode = _loadDocument(szFilename, static_cast<IEFileType>(ieft), createNew);
打开word文件代码段
UT_Error PD_Document::readFromFile(const char * szFilename, int ieft,
const char * impProps)
UT_Error PD_Document::readFromFile(const char * szFilename, int ieft, const char * impProps) { if (!szFilename || !*szFilename) { UT_DEBUGMSG(("PD_Document::readFromFile -- invalid filename ")); return UT_INVALIDFILENAME; } if ( !UT_isRegularFile(szFilename) ) { UT_DEBUGMSG (("PD_Document::readFromFile -- file (%s) is not plain file ",szFilename)); return UT_INVALIDFILENAME; } if (!UT_fileSize(szFilename)) { UT_DEBUGMSG(("PD_Document::readFromFile -- file (%s) is empty ",szFilename)); return UT_IE_BOGUSDOCUMENT; } m_pPieceTable = new pt_PieceTable(this); if (!m_pPieceTable) { UT_DEBUGMSG(("PD_Document::readFromFile -- could not construct piece table ")); return UT_NOPIECETABLE; } m_pPieceTable->setPieceTableState(PTS_Loading); { UT_String template_list[6]; buildTemplateList (template_list, "normal.awt"); bool success = false; for (UT_uint32 i = 0; i < 6 && !success; i++) success = (importStyles(template_list[i].c_str(), ieft, true) == UT_OK); // don't worry if this fails } IE_Imp * pie = NULL; UT_Error errorCode; errorCode = IE_Imp::constructImporter(this, szFilename, static_cast<IEFileType>(ieft), &pie, &m_lastOpenedType); if (errorCode) { UT_DEBUGMSG(("PD_Document::readFromFile -- could not construct importer ")); return errorCode; } if (impProps && strlen(impProps)) pie->setProps (impProps); _syncFileTypes(false); // set standard document properties and attributes, such as dtd, lang, // dom-dir, etc., which the importer can then overwite // this also initializes m_indexAP m_indexAP = 0xffffffff; setAttrProp(NULL); errorCode = pie->importFile(szFilename); delete pie; repairDoc(); //意味着之前已经读取并且分析了文档结构了