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 :
- #include
- #include
-
- //----------------------以下为函数说明----------------------
- // 加载DLL,设置动态库需要的临时文件夹,且对此文件夹要有读写权限
- typedef void (*LOAD)(char *tempDir);
-
- //注册软件: 免费版也需要调用此函数,corp和licText都为空
- typedef int (*AUTH)(char *corp, char *licText);
-
- // 提供文件正文,并保存到目标文件
- // inFilePtr输入文件地址, outFilePtr为TXT目标文件文件地址
- typedef int (*TOTEXTFILE)(char *inFilePtr, char *outFilePtr);
- // 提供文件正文
- // inFilePtr输入文件地址, 返回UTF-8编码字符串数据指针(此指针需要使用FREESTRING函数释放内存)
- typedef char* (*TOSTRING)(char *inFilePtr);
- // 释放TOSTRING等函数的返回指针
- typedef void (*FREESTRING)(char *p);
- // 得到最后的错误信息
- typedef char* (*LASTERR)();
-
- // 提取Http/Https文件,返回字符串数据指针
- // url=Http/Https地址
- // fileExt=文件类型(比如:".pdf"),
- // timeout=超时设置,超过此数值系统终止下载文件。单位为毫秒,默认为0(等待文件下载直到完成)
- // httpParams=JSON格式header数据和cookie数据,默认为空
- /*
- JSON格式如下:
- {"headers":
- [{名称1: 值1},{名称2: 值2},...],
- "cookies":[
- {"name": 名称(字符串), "value": 值(字符串), "expires": 有效期(整数,单位毫秒),
- "path": 路径(字符串), "domain": 域名(字符串)},
- {"name": 名称(字符串), "value": 值(字符串), "expires": 有效期(整数,单位毫秒),
- "path": 路径(字符串), "domain": 域名(字符串)}
- ...
- ]}
- 例如:
- {"headers":[{"client_id": "g01x9"}, {"client_secret": "e23c89cc9fe"}, {"client_index": 10092}],
- "cookies":[{"name": "ga", "value": "1020", "expires":36000000, "path": "/hx/", "domain":"www.gaya-soft.cn"},
- {"name": "xc3", "value": "10099", "expires":240000, "path": "", "domain":""}]}
- */
- // 返回UTF-8编码字符串数据指针(此指针需要使用FREESTRING函数释放内存)
- typedef char* (*HTTPTOSTRING)(char *url, char *fileExt, int timeout, char *httpParams);
-
- // 下载Http文件,并提取文本,保存到目标文件u
- // outfile为TXT目标文件文件地址,其他参数和HTTPTOSTRING参数相同
- typedef int (*HTTPTOTEXTFILE)(char *url, char *fileExt, char *outfile, int timeout, char *httpParams);
-
- //---------------------异步批量处理相关函数---------------------
- // 文件提取异步任务, Infile输入文件地址, Outfile为TXT目标文件文件
- // 如果提取某个文件错误,则 Outfile的内容如下格式: @ErrCode:错误代码, ErrMessage:错误提示
- typedef void (*ADDTASK)(char *inFilePtr, char * outTxtFilePtr);
- // 异步提取Http文件任务,参数同 HTTPTOTEXTFILE 函数
- typedef void (*ADDHTTPTASK)(char * url, char *fileExt, char *outTxtFile, int timeout, char *httpParams);
- // 开始执行异步任务,返回值=1开始执行, 其他值未识别
- // =2 免费版不支持此功能,=3 没有可以执行的任务 ,=4 当前任务未完成
- typedef int (*ASYNCSTART)();
- // 停止任务
- typedef void (*ASYNCSTOP)();
- // 一直等待,直到全部异步任务结束
- typedef void (*ASYNCWAIT)();
- // 得到执行异步任务的状态, =0 没开始, =1 正在处理中,=2 已中断, =99 处理完成
- typedef int (*ASYNCSTATE)();
- // 设置执行异步任务的并发数量(不大于软件授权数量),返回并发数量
- typedef int (*ASYNCMAXPROCS)(int num);
- //---------------------异步批量处理相关函数---------------------
-
- // 关闭动态库前调用此函数释放资源,否则关闭DLL会发生错误
- typedef void (*UNLOAD)();
-
- typedef void(*SAVESN)();
-
- //提取文本的错误类型
- enum GrErrCode
- {
- TFE_OK = 0,
- TFE_UNKNOW = 1,
- TFE_FILE_NOTEXIST = 2,
- TFE_SAVE_ERROR = 3,
- TFE_OUTSIZE = 4,
- TFE_UNSUPPORTED = 5,
- TFE_ERROR_INTERFACE = 6,
- TFE_HTTP_ERR = 7,
- TFE_HTTP_FILE_NULL = 8,
- TFE_LICENCE_ERR = 9
- };
提取正文CPP文件:
可以修改testToTextFile函数中的输入文件为需要处理的文件即可。
- #include
- #include
- #include
- #include
- #include
- #include
- #include "graccvs.h"
-
- using namespace std;
-
- void wcharToUtf8(const wchar_t *src, char *dest, int destSize)
- {
- int ik = WideCharToMultiByte(CP_UTF8, 0, src, (int)wcslen(src), dest, destSize, NULL, NULL);
- for (int i = ik; i < destSize; i++)
- {
- dest[i] = 0;
- }
- }
-
- wchar_t *utf8ToWchar(const char *src, int srcSize)
- {
- DWORD destSize = MultiByteToWideChar(CP_UTF8, 0, src, srcSize, NULL, 0);
- wchar_t * dest = new wchar_t[destSize];
- wmemset(dest, 0, destSize);
- MultiByteToWideChar(CP_UTF8, 0, src, srcSize, dest, destSize);
- return dest;
- }
-
- // 根据错误类型返回错误信息
- const wchar_t *codeText(int code)
- {
- switch (code)
- {
- case TFE_OK:
- return L"ok";
- case TFE_UNKNOW:
- return L"未知错误";
- case TFE_FILE_NOTEXIST:
- return L"提取源文件不存在";
- case TFE_SAVE_ERROR:
- return L"保存目标文件失败";
- case TFE_OUTSIZE:
- return L"提取的源文件超出设置的大小范围";
- case TFE_UNSUPPORTED:
- return L"不支持的提取文件格式";
- case TFE_ERROR_INTERFACE:
- return L"得到接口失败";
- case TFE_HTTP_ERR:
- return L"HTTP下载文件失败";
- case TFE_HTTP_FILE_NULL:
- return L"HTTP文件为空";
- case TFE_LICENCE_ERR:
- return L"软件许可错误";
- default:
- return L"未知错误2";
- }
- }
-
-
- // ------------------------提取正文并保存为文本文件------------------------
- void testToTextFile(HINSTANCE handle, LASTERR lastErr)
- {
- TOTEXTFILE toTextFile = (TOTEXTFILE)GetProcAddress(handle, "ToTextFile");
- if (toTextFile == NULL) {
- return;
- }
-
- static char inFileName[255]; // 根据实际情况分配长度
- wcharToUtf8(L"test\\graccvs文件正文提取接口.pdf", &inFileName[0], 255);
- static char outFileName[255];
- wcharToUtf8(L"test\\out001.txt", &outFileName[0], 255);
- // 调用DLL函数得到文件正文
- int code = toTextFile(&inFileName[0], &outFileName[0]);
- //TFE_OK为提取完成,其他code调用codeText返回相同错误
- if (code != TFE_OK)
- {
- // 得到错误方式1: 根据R值调用函数ErrText得到具体错误信息, 此方式速度快
- const wchar_t * e = codeText(code);
- wprintf(L"error from code: %s\n", e);
-
- // 方式2:调用DLL函数,得到具体错误信息, 此方式错误信息更加准确
- char *p = (char*)lastErr();
- wchar_t* err2 = utf8ToWchar(p, (int)strlen(p));
- wprintf(L"error from dll: %ls\n", err2);
- delete(err2);
- }
- else
- {
- wprintf(L"testToTextFile end\n");
- }
- }
-
- // ------------------------提取正文,返回字符串指针------------------------
- void testToString(HINSTANCE handle, FREESTRING freeString)
- {
- TOSTRING toString = (TOSTRING)GetProcAddress(handle, "ToString");
- if (toString == NULL || freeString == NULL) {
- return;
- }
-
- static char inFileName2[255];
- wcharToUtf8(L"test\\简可信模板OCR识别工具帮助.docx", &inFileName2[0], 255);
- char *p = toString(&inFileName2[0]); //返回UTF-8编码字符串
-
- // 转 unicode编码
- int count = (int)strlen(p);
- wchar_t* text = utf8ToWchar(p, count);
- wprintf(L"testToString= %s\n", text);
- delete(text);
-
- freeString(p); // 务必调用freeString函数释放字符串内存
- }
-
- // ------------------------HTTP提取正文并保存为文本文件------------------------
- void testHttpToTextFile(HINSTANCE handle)
- {
- HTTPTOTEXTFILE httpToTextFile = (HTTPTOTEXTFILE)GetProcAddress(handle, "HttpToTextFile");
- if (httpToTextFile == NULL) {
- return;
- }
-
- static char rul[255], ext[6], outFile[128];
- wcharToUtf8(L"https://www.gaya-soft.cn/dfs/v2/简可信模板OCR识别工具帮助.docx", &rul[0], 255);
- wcharToUtf8(L".docx", &ext[0], 6);
- wcharToUtf8(L"test\\out002.txt", &outFile[0], 128);
- // 调用DLL函数得到文件正文
- int timeout = 0; //超时设置,单位毫秒, 默认为0
- int code = httpToTextFile(&rul[0], &ext[0], &outFile[0], timeout, NULL);
- //TFE_OK为提取完成,其他code调用codeText返回相同错误
- if (code != TFE_OK)
- {
- const wchar_t* e = codeText(code);
- wprintf(L"error from code: %s\n", e);
- }
- else
- {
- wprintf(L"testHttpToTextFile end\n");
- }
- }
-
- // ------------------------HTTP提取正文,返回字符串指针------------------------
- void testHttpToString(HINSTANCE handle, FREESTRING freeString)
- {
- HTTPTOSTRING httpToString = (HTTPTOSTRING)GetProcAddress(handle, "HttpToString");
- if (httpToString == NULL || freeString == NULL) {
- return;
- }
-
- static char rul[255], ext[6], params[512];
- wcharToUtf8(L"https://www.gaya-soft.cn/dfs/v2/graccvs文件正文提取接口.pdf", &rul[0], 255);
-
原文:https://blog.csdn.net/kkyy2021/article/details/122589162