源码版本: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\n " )); return UT_INVALIDFILENAME; } if ( ! UT_isRegularFile(szFilename) ) { UT_DEBUGMSG (( " PD_Document::readFromFile -- file (%s) is not plain file\n " ,szFilename)); return UT_INVALIDFILENAME; } if (! UT_fileSize(szFilename)) { UT_DEBUGMSG(( " PD_Document::readFromFile -- file (%s) is empty\n " ,szFilename)); return UT_IE_BOGUSDOCUMENT; } m_pPieceTable = new pt_PieceTable( this ); if (! m_pPieceTable) { UT_DEBUGMSG(( " PD_Document::readFromFile -- could not construct piece table\n " )); 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\n " )); 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(); // 意味着之前已经读取并且分析了文档结构了