当前位置:   article > 正文

文件解析库doctotext源码分析

doctotext 输出
doctotext中没有make install选项,make后生成可执行文件
在buile目录下面有.so动态库和头文件,需要的可以从这里面拷贝
build/doctotext就是可执行程序。
 
doctotext内置了两种检测文件类型方法:
1、以后缀为依据检测文件类型
2、以内容为依据检测文件类型
 
下面是doctotext支持的文件类型:
  1. DOC, XLS, XLSB, PPT, RTF, ODF (ODT, ODS, ODP),
  2. OOXML (DOCX, XLSX, PPTX), iWork (PAGES, NUMBERS, KEYNOTE),
  3. ODFXML (FODP, FODS, FODT), PDF, EML and HTML documents to plain text.
  4. Extracts metadata and annotations.

对于解析像office2007这类的文件,doctotext只是识别出来格式是OOXML类型,并没有细分是word还是execl。

如果用户没有指定文件类型,在解析文件的时候先先进行后缀检测判断文件类型,根据检测结果调用相应格式的文件解析器。
当解析过程中发现格式错误的时候,终止解析。使用内容检测判断文件类型,然后再根据检测结果调用相应格式的文件解析器。
如果是未识别的文件格式则终止进程。
 
main()函数位于src/doctotext.cpp中
    
从main()函数开始分析。
   doctotext_init_tracing()函数,用于调试跟踪。产生信息文件doctotext.trace
定义变量extract_metadata,初始为不显示文件属性信息
    bool extract_metadata = false;
 
名字空间:
   
  1. namespace doctotext
  2. {
  3. enum TableStyle { TABLE_STYLE_TABLE_LOOK, TABLE_STYLE_ONE_ROW, TABLE_STYLE_ONE_COL, };
  4. enum UrlStyle { URL_STYLE_TEXT_ONLY, URL_STYLE_EXTENDED, URL_STYLE_UNDERSCORED, };
  5. class ListStyle {};
  6. struct FormattingStyle
  7. {
  8. TableStyle table_style;
  9. UrlStyle url_style;
  10. ListStyle list_style;
  11. };
  12. enum XmlParseMode {PARSE_XML, FIX_XML, STRIP_XML};
  13. }
类:
    
  1. class PlainTextExtractor
  2. {
  3. //文件类型的枚举
  4. enum ParserType{......}
  5. //实现结构体
  6. struct Implementation;
  7. //实现结构体私有变量
  8. Implementation *impl;
  9. }

implementation中实现的函数列表

//判断不同的文件类型是否正确
  1. isRTF [PlainTextExtractor::Implementation]
  2. isODFOOXML [PlainTextExtractor::Implementation]
  3. isXLS [PlainTextExtractor::Implementation]
  4. isDOC [PlainTextExtractor::Implementation]
  5. isPPT [PlainTextExtractor::Implementation]
  6. isHTML [PlainTextExtractor::Implementation]
  7. isIWork [PlainTextExtractor::Implementation]
  8. isXLSB [PlainTextExtractor::Implementation]
  9. isPDF [PlainTextExtractor::Implementation]
  10. isEML [PlainTextExtractor::Implementation]
  11. isODFXML [PlainTextExtractor::Implementation]
//不同文件类型的解析器
  1. parseRTF [PlainTextExtractor::Implementation]
  2. parseODFOOXML [PlainTextExtractor::Implementation]
  3. parseXLS [PlainTextExtractor::Implementation]
  4. parseDOC [PlainTextExtractor::Implementation]
  5. parsePPT [PlainTextExtractor::Implementation]
  6. parseHTML [PlainTextExtractor::Implementation]
  7. parseIWork [PlainTextExtractor::Implementation]
  8. parseXLSB [PlainTextExtractor::Implementation]
  9. parsePDF [PlainTextExtractor::Implementation]
  10. parseTXT [PlainTextExtractor::Implementation]
  11. parseEML [PlainTextExtractor::Implementation]
  12. parseODFXML [PlainTextExtractor::Implementation]
  13. parseRTFMetadata [PlainTextExtractor::Implementation]
  14. parseODFOOXMLMetadata [PlainTextExtractor::Implementation]
  15. parseXLSMetadata [PlainTextExtractor::Implementation]
  16. parseDOCMetadata [PlainTextExtractor::Implementation]
  17. parsePPTMetadata [PlainTextExtractor::Implementation]
  18. parseHTMLMetadata [PlainTextExtractor::Implementation]
  19. parseIWorkMetadata [PlainTextExtractor::Implementation]
  20. parseXLSBMetadata [PlainTextExtractor::Implementation]
  21. parsePDFMetadata [PlainTextExtractor::Implementation]
  22. parseEMLMetadata [PlainTextExtractor::Implementation]
  23. parseODFXMLMetadata [PlainTextExtractor::Implementation]
PlainTextExtractor类中实现的函数列表
  1. PlainTextExtractor [PlainTextExtractor]
  2. ~PlainTextExtractor [PlainTextExtractor]
  3. setVerboseLogging [PlainTextExtractor]
  4. setLogStream [PlainTextExtractor]
  5. setFormattingStyle [PlainTextExtractor]
  6. setXmlParseMode [PlainTextExtractor]
  7. setManageXmlParser [PlainTextExtractor]
  8. parserTypeByFileExtension [PlainTextExtractor]
  9. parserTypeByFileExtension [PlainTextExtractor]
  10. parserTypeByFileContent [PlainTextExtractor]
  11. parserTypeByFileContent [PlainTextExtractor]
  12. parserTypeByFileContent [PlainTextExtractor]
  13. processFile [PlainTextExtractor]
  14. processFile [PlainTextExtractor]
  15. processFile [PlainTextExtractor]
  16. processFile [PlainTextExtractor]

根据输入参数选项指定文件类型

指定parser_type的值
 
创建变量
PlainTextExtractor extractor(parser_type);
 
详细日志默认关闭
verbose = false
 
设置详细日志开启: extractor.setVerboseLogging(true);
设置XM解析模式:extractor.setXmlParseMode(mode);
设置格式类型:extractor.setFormattingStyle(options);
 
解析文件显示详细文件属性:
extractor.extractMetadata(argv[argc - 1], meta);
 
解析文件显示文件内容:
extractor.processFile(argv[argc - 1], text);
 
根据文件类型调用不同的文件解析器
processFile(parser_type, fallback, buffer, size, plain_text)
 
根据文件扩展名称判断文件类型
parserTypeByFileExtension(file_name);
 
根据内容判断文件类型:
parserTypeByFileContent(buffer, size, parser_type);
 
程序流程图:
 
 
 
官方从2014年开始就不更新了,具体什么原因不知,github 上自己维护的 doctotext 
 

转载于:https://www.cnblogs.com/etangyushan/p/4259814.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/391420
推荐阅读
相关标签
  

闽ICP备14008679号