• 首页
  • 栏目
  • CRM
  • VC语言文件正文分析器--支持格式常用文件格式

VC语言文件正文分析器--支持格式常用文件格式

  • 2022-01-19
  • Admin

Graccvs文件正文提取开发组件支持各种文件提取正文,为OA,ERP,CRM系统使用文件提供文件正文使用和搜索,支持常见各种文件格式”.pdf", ".doc", ".odt", ".docx", ".dotm", ".docm", ".wps", 
".xls", ".xlsx", ".xlsm", ".xltm", ".et", ".ppt", ".pptx", ".potm", ".pptm", ".ppsm", ".dps", ".ofd"(电子发票版式文件), ".rtf",".html", ".htm", ".mht", ".mhtml", ".eml", ".emmx", "xmind", "gmind", ".chm", ".zip" 等。

Graccvs提供免费版本,以下是调用过程及代码,起来文件输入修改为要提取的文件名称和类型即可。

1: 点击这里下载完整工程包,这里下载最新DLL文件 。
2:拷贝 graccvs64.dll到工程中, 默认在exe输出位置。
3:实现提取文件正文函数,详细参考工程文件。

4:系统提供组件调用方式说明,参数说明等详细资料。

5:具体使用请访问 Graccvs文件正文提取开发组件--在线帮助

代码头文件graccvs.h :

  1. #include
  2. #include
  3. //----------------------以下为函数说明----------------------
  4. // 加载DLL,设置动态库需要的临时文件夹,且对此文件夹要有读写权限
  5. typedef void (*LOAD)(char *tempDir);
  6. //注册软件: 免费版也需要调用此函数,corp和licText都为空
  7. typedef int (*AUTH)(char *corp, char *licText);
  8. // 提供文件正文,并保存到目标文件
  9. // inFilePtr输入文件地址, outFilePtr为TXT目标文件文件地址
  10. typedef int (*TOTEXTFILE)(char *inFilePtr, char *outFilePtr);
  11. // 提供文件正文
  12. // inFilePtr输入文件地址, 返回UTF-8编码字符串数据指针(此指针需要使用FREESTRING函数释放内存)
  13. typedef char* (*TOSTRING)(char *inFilePtr);
  14. // 释放TOSTRING等函数的返回指针
  15. typedef void (*FREESTRING)(char *p);
  16. // 得到最后的错误信息
  17. typedef char* (*LASTERR)();
  18. // 提取Http/Https文件,返回字符串数据指针
  19. // url=Http/Https地址
  20. // fileExt=文件类型(比如:".pdf"),
  21. // timeout=超时设置,超过此数值系统终止下载文件。单位为毫秒,默认为0(等待文件下载直到完成)
  22. // httpParams=JSON格式header数据和cookie数据,默认为空
  23. /*
  24. JSON格式如下:
  25. {"headers":
  26. [{名称1: 值1},{名称2: 值2},...],
  27. "cookies":[
  28. {"name": 名称(字符串), "value": 值(字符串), "expires": 有效期(整数,单位毫秒),
  29. "path": 路径(字符串), "domain": 域名(字符串)},
  30. {"name": 名称(字符串), "value": 值(字符串), "expires": 有效期(整数,单位毫秒),
  31. "path": 路径(字符串), "domain": 域名(字符串)}
  32. ...
  33. ]}
  34. 例如:
  35. {"headers":[{"client_id": "g01x9"}, {"client_secret": "e23c89cc9fe"}, {"client_index": 10092}],
  36. "cookies":[{"name": "ga", "value": "1020", "expires":36000000, "path": "/hx/", "domain":"www.gaya-soft.cn"},
  37. {"name": "xc3", "value": "10099", "expires":240000, "path": "", "domain":""}]}
  38. */
  39. // 返回UTF-8编码字符串数据指针(此指针需要使用FREESTRING函数释放内存)
  40. typedef char* (*HTTPTOSTRING)(char *url, char *fileExt, int timeout, char *httpParams);
  41. // 下载Http文件,并提取文本,保存到目标文件u
  42. // outfile为TXT目标文件文件地址,其他参数和HTTPTOSTRING参数相同
  43. typedef int (*HTTPTOTEXTFILE)(char *url, char *fileExt, char *outfile, int timeout, char *httpParams);
  44. //---------------------异步批量处理相关函数---------------------
  45. // 文件提取异步任务, Infile输入文件地址, Outfile为TXT目标文件文件
  46. // 如果提取某个文件错误,则 Outfile的内容如下格式: @ErrCode:错误代码, ErrMessage:错误提示
  47. typedef void (*ADDTASK)(char *inFilePtr, char * outTxtFilePtr);
  48. // 异步提取Http文件任务,参数同 HTTPTOTEXTFILE 函数
  49. typedef void (*ADDHTTPTASK)(char * url, char *fileExt, char *outTxtFile, int timeout, char *httpParams);
  50. // 开始执行异步任务,返回值=1开始执行, 其他值未识别
  51. // =2 免费版不支持此功能,=3 没有可以执行的任务 ,=4 当前任务未完成
  52. typedef int (*ASYNCSTART)();
  53. // 停止任务
  54. typedef void (*ASYNCSTOP)();
  55. // 一直等待,直到全部异步任务结束
  56. typedef void (*ASYNCWAIT)();
  57. // 得到执行异步任务的状态, =0 没开始, =1 正在处理中,=2 已中断, =99 处理完成
  58. typedef int (*ASYNCSTATE)();
  59. // 设置执行异步任务的并发数量(不大于软件授权数量),返回并发数量
  60. typedef int (*ASYNCMAXPROCS)(int num);
  61. //---------------------异步批量处理相关函数---------------------
  62. // 关闭动态库前调用此函数释放资源,否则关闭DLL会发生错误
  63. typedef void (*UNLOAD)();
  64. typedef void(*SAVESN)();
  65. //提取文本的错误类型
  66. enum GrErrCode
  67. {
  68. TFE_OK = 0,
  69. TFE_UNKNOW = 1,
  70. TFE_FILE_NOTEXIST = 2,
  71. TFE_SAVE_ERROR = 3,
  72. TFE_OUTSIZE = 4,
  73. TFE_UNSUPPORTED = 5,
  74. TFE_ERROR_INTERFACE = 6,
  75. TFE_HTTP_ERR = 7,
  76. TFE_HTTP_FILE_NULL = 8,
  77. TFE_LICENCE_ERR = 9
  78. };

提取正文CPP文件:
 可以修改testToTextFile函数中的输入文件为需要处理的文件即可。

  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include "graccvs.h"
  8. using namespace std;
  9. void wcharToUtf8(const wchar_t *src, char *dest, int destSize)
  10. {
  11. int ik = WideCharToMultiByte(CP_UTF8, 0, src, (int)wcslen(src), dest, destSize, NULL, NULL);
  12. for (int i = ik; i < destSize; i++)
  13. {
  14. dest[i] = 0;
  15. }
  16. }
  17. wchar_t *utf8ToWchar(const char *src, int srcSize)
  18. {
  19. DWORD destSize = MultiByteToWideChar(CP_UTF8, 0, src, srcSize, NULL, 0);
  20. wchar_t * dest = new wchar_t[destSize];
  21. wmemset(dest, 0, destSize);
  22. MultiByteToWideChar(CP_UTF8, 0, src, srcSize, dest, destSize);
  23. return dest;
  24. }
  25. // 根据错误类型返回错误信息
  26. const wchar_t *codeText(int code)
  27. {
  28. switch (code)
  29. {
  30. case TFE_OK:
  31. return L"ok";
  32. case TFE_UNKNOW:
  33. return L"未知错误";
  34. case TFE_FILE_NOTEXIST:
  35. return L"提取源文件不存在";
  36. case TFE_SAVE_ERROR:
  37. return L"保存目标文件失败";
  38. case TFE_OUTSIZE:
  39. return L"提取的源文件超出设置的大小范围";
  40. case TFE_UNSUPPORTED:
  41. return L"不支持的提取文件格式";
  42. case TFE_ERROR_INTERFACE:
  43. return L"得到接口失败";
  44. case TFE_HTTP_ERR:
  45. return L"HTTP下载文件失败";
  46. case TFE_HTTP_FILE_NULL:
  47. return L"HTTP文件为空";
  48. case TFE_LICENCE_ERR:
  49. return L"软件许可错误";
  50. default:
  51. return L"未知错误2";
  52. }
  53. }
  54. // ------------------------提取正文并保存为文本文件------------------------
  55. void testToTextFile(HINSTANCE handle, LASTERR lastErr)
  56. {
  57. TOTEXTFILE toTextFile = (TOTEXTFILE)GetProcAddress(handle, "ToTextFile");
  58. if (toTextFile == NULL) {
  59. return;
  60. }
  61. static char inFileName[255]; // 根据实际情况分配长度
  62. wcharToUtf8(L"test\\graccvs文件正文提取接口.pdf", &inFileName[0], 255);
  63. static char outFileName[255];
  64. wcharToUtf8(L"test\\out001.txt", &outFileName[0], 255);
  65. // 调用DLL函数得到文件正文
  66. int code = toTextFile(&inFileName[0], &outFileName[0]);
  67. //TFE_OK为提取完成,其他code调用codeText返回相同错误
  68. if (code != TFE_OK)
  69. {
  70. // 得到错误方式1: 根据R值调用函数ErrText得到具体错误信息, 此方式速度快
  71. const wchar_t * e = codeText(code);
  72. wprintf(L"error from code: %s\n", e);
  73. // 方式2:调用DLL函数,得到具体错误信息, 此方式错误信息更加准确
  74. char *p = (char*)lastErr();
  75. wchar_t* err2 = utf8ToWchar(p, (int)strlen(p));
  76. wprintf(L"error from dll: %ls\n", err2);
  77. delete(err2);
  78. }
  79. else
  80. {
  81. wprintf(L"testToTextFile end\n");
  82. }
  83. }
  84. // ------------------------提取正文,返回字符串指针------------------------
  85. void testToString(HINSTANCE handle, FREESTRING freeString)
  86. {
  87. TOSTRING toString = (TOSTRING)GetProcAddress(handle, "ToString");
  88. if (toString == NULL || freeString == NULL) {
  89. return;
  90. }
  91. static char inFileName2[255];
  92. wcharToUtf8(L"test\\简可信模板OCR识别工具帮助.docx", &inFileName2[0], 255);
  93. char *p = toString(&inFileName2[0]); //返回UTF-8编码字符串
  94. // 转 unicode编码
  95. int count = (int)strlen(p);
  96. wchar_t* text = utf8ToWchar(p, count);
  97. wprintf(L"testToString= %s\n", text);
  98. delete(text);
  99. freeString(p); // 务必调用freeString函数释放字符串内存
  100. }
  101. // ------------------------HTTP提取正文并保存为文本文件------------------------
  102. void testHttpToTextFile(HINSTANCE handle)
  103. {
  104. HTTPTOTEXTFILE httpToTextFile = (HTTPTOTEXTFILE)GetProcAddress(handle, "HttpToTextFile");
  105. if (httpToTextFile == NULL) {
  106. return;
  107. }
  108. static char rul[255], ext[6], outFile[128];
  109. wcharToUtf8(L"https://www.gaya-soft.cn/dfs/v2/简可信模板OCR识别工具帮助.docx", &rul[0], 255);
  110. wcharToUtf8(L".docx", &ext[0], 6);
  111. wcharToUtf8(L"test\\out002.txt", &outFile[0], 128);
  112. // 调用DLL函数得到文件正文
  113. int timeout = 0; //超时设置,单位毫秒, 默认为0
  114. int code = httpToTextFile(&rul[0], &ext[0], &outFile[0], timeout, NULL);
  115. //TFE_OK为提取完成,其他code调用codeText返回相同错误
  116. if (code != TFE_OK)
  117. {
  118. const wchar_t* e = codeText(code);
  119. wprintf(L"error from code: %s\n", e);
  120. }
  121. else
  122. {
  123. wprintf(L"testHttpToTextFile end\n");
  124. }
  125. }
  126. // ------------------------HTTP提取正文,返回字符串指针------------------------
  127. void testHttpToString(HINSTANCE handle, FREESTRING freeString)
  128. {
  129. HTTPTOSTRING httpToString = (HTTPTOSTRING)GetProcAddress(handle, "HttpToString");
  130. if (httpToString == NULL || freeString == NULL) {
  131. return;
  132. }
  133. static char rul[255], ext[6], params[512];
  134. wcharToUtf8(L"https://www.gaya-soft.cn/dfs/v2/graccvs文件正文提取接口.pdf", &rul[0], 255);
  135. 原文:https://blog.csdn.net/kkyy2021/article/details/122589162

联系站长

QQ:769220720

Copyright © SibooSoft All right reserved 津ICP备19011444号