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 <stdio.h>
#include <stdlib.h>//----------------------以下为函数说明----------------------
// 加载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 <windows.h>
#include <string>
#include <ctype.h>
#include <stdio.h>
#include <locale.h>
#include <time.h>
#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);wcharToUtf8(L".pdf", &ext[0], 6);wcharToUtf8(L"{\"headers\":[{\"client_id\": \"g01x9\"}, {\"client_secret\": \"e23c89cc9fe\"}]}", ¶ms[0], 512);int timeout = 60 * 1000; //超时设置,单位毫秒 //char *p = httpToString(&rul[0], &ext[0], timeout, ¶ms[0]);// 转 unicode编码int count = (int)strlen(p);wchar_t* text = utf8ToWchar(p, count);wprintf(L"testHttpToString= %s\n", text);//freeString(p); // 务必调用freeString函数释放字符串内存
}// ---------------异步批量文件提取,适合多线程处理很多文件---------------
// 文件提取任务
void asyncAddTask(HINSTANCE handle)
{ADDTASK addTask = (ADDTASK)GetProcAddress(handle, "AddTask");if (addTask == NULL) {return;}// -----可以增加N个任务 static char inFn[255], inFn2[255], outFn[255], outFn2[255];wcharToUtf8(L"test\\graccvs文件正文提取接口.pdf", &inFn[0], 255);wcharToUtf8(L"test\\asyncOut001.txt", &outFn[0], 255);addTask(&inFn[0], &outFn[0]); // 一个文件任务wcharToUtf8(L"test\\Adobe Intro.ofd", &inFn2[0], 255);wcharToUtf8(L"test\\asyncOut002.txt", &outFn2[0], 255);addTask(&inFn2[0], &outFn2[0]);  // 一个文件任务
}// Http文件提取任务
void asyncAddHttpTask(HINSTANCE handle)
{ADDHTTPTASK addHttpTask = (ADDHTTPTASK)GetProcAddress(handle, "AddHttpTask");if (addHttpTask == NULL) {return;}// 可以增加N个任务static char rul[255], ext[6], outFn[255];wcharToUtf8(L"https://www.gaya-soft.cn/dfs/v2/简可信模板OCR识别工具帮助.docx", &rul[0], 255);wcharToUtf8(L".docx", &ext[0], 6);wcharToUtf8(L"test\\asyncOut003.txt", &outFn[0], 255);int timeout = 90 * 1000; //超时设置,单位毫秒, 默认为0addHttpTask(&rul[0], &ext[0], &outFn[0], timeout, NULL);
}// 方式1:开始任务,等待全部任务完成
void asyncRun1(HINSTANCE handle, ASYNCSTART asyncStart)
{ASYNCWAIT asyncWait = (ASYNCWAIT)GetProcAddress(handle, "AsyncWait");if (asyncWait == NULL) {return;}// 开始任务int r = asyncStart();if (r == 1) {asyncWait(); // 等待任务全部结束wprintf(L"方式1--任务完成\n");}else if (r == 2) {wprintf(L"免费版不支持此功能\n");}else if (r == 3) {wprintf(L"没有可以执行的任务\n");}else if (r == 4) {wprintf(L"当前任务未完成\n");}
}// 方式2:判断执行情况,超时退出,主动结束任务
void asyncRun2(HINSTANCE handle, ASYNCSTART asyncStart)
{ASYNCSTOP asyncStop = (ASYNCSTOP)GetProcAddress(handle, "AsyncStop");ASYNCSTATE asyncState = (ASYNCSTATE)GetProcAddress(handle, "AsyncState");if (asyncStop == NULL || asyncState == NULL) {return;}// 开始任务BOOL isOver = FALSE;int r = asyncStart();if (r == 1) {//clock_t start_t = clock();time_t start_tm;time(&start_tm);// 5分钟后结束任务while (TRUE) {time_t n;time(&n);// 5分钟后中断if (difftime(n, start_tm) > 5 * 60) {break;}// 判断任务情况, =0 没开始, =1 正在处理中,=2 已中断, =99 处理完成int x = asyncState();if (x == 1) {Sleep(500);}else if (x == 99) {isOver = TRUE; // 处理完成break;}else {break;}}//if (!isOver) {asyncStop(); // 结束任务 }wprintf(L"方式2--任务完成\n");}else if (r == 2) {wprintf(L"免费版不支持此功能\n");}else if (r == 3) {wprintf(L"没有可以执行的任务\n");}else if (r == 4) {wprintf(L"当前任务未完成\n");}
}void asyncTest(HINSTANCE handle)
{ASYNCMAXPROCS asyncMaxProcs = (ASYNCMAXPROCS)GetProcAddress(handle, "AsyncMaxProcs");ASYNCSTART asyncStart = (ASYNCSTART)GetProcAddress(handle, "AsyncStart");//if (asyncMaxProcs == NULL || asyncStart == NULL) {return;}//asyncMaxProcs(8); // 同时运行8个任务//asyncAddTask(handle);  // 文件提取任务 asyncAddHttpTask(handle); // Http文件提取任务// 执行任务--方式1asyncRun1(handle, asyncStart);// 执行任务--方式2asyncAddTask(handle);asyncAddHttpTask(handle);asyncRun2(handle, asyncStart);
}
// ---------------异步批量文件提取,适合多线程处理很多文件---------------void saveSn(HINSTANCE handle)
{SAVESN saveSn = (SAVESN)GetProcAddress(handle, "SaveSn");saveSn();
}int main()
{setlocale(LC_ALL, "");  //std::cout << "Hello World!\n"; wprintf(L"graccvs dll test\n");//HINSTANCE handle = LoadLibraryA("graccvs64.dll"); //默认64位系统,32位DLL或者接口更新请到官网 if (handle <= 0){return 0;}LOAD load = (LOAD)GetProcAddress(handle, "Load");AUTH auth = (AUTH)GetProcAddress(handle, "Auth");FREESTRING freeString = (FREESTRING)GetProcAddress(handle, "FreeString");LASTERR lastErr = (LASTERR)GetProcAddress(handle, "LastErr");UNLOAD unload = (UNLOAD)GetProcAddress(handle, "Unload");if (load != NULL && auth != NULL && lastErr != NULL && unload != NULL){// DLL加载,提取文本需要的临时文件夹,且对此文件夹要有读写权限static char tempPath[128];wcharToUtf8(L"test", &tempPath[0], 128);load(&tempPath[0]);wprintf(L"init over\n");// 设置软件许可,免费版都为空static char corp[128], licText[1024];wcharToUtf8(L"Beij Gaya", &corp[0], 128);wcharToUtf8(L"", licText, 1024); //企业版这里设置授权文本  &licText[0]auth(&corp[0], &licText[0]);// 提取正文并保存为文本文件testToTextFile(handle, lastErr);// 提取正文,返回字符串指针testToString(handle, freeString);// 提取HTTP提取正文, 并保存为文本文件testHttpToTextFile(handle);// 提取HTTP提取正文, 返回字符串指针testHttpToString(handle, freeString);// 异步批量文件提取测试asyncTest(handle);//调用此函数,卸载DLL参数,和load对应使用unload();}Sleep(800);FreeLibrary(handle);Sleep(200);wprintf(L"all over\n");return 1;}

组件提供多种操作系统动态链接库
1)Windows平台: (32bit和64bit)
     提供dll格式及GCC、VC、JAVA、C#、delphi调用示例。
2)Linux平台: (64bit)
    内核版本4.x及以上, 中标麒麟7.0.0(64bit)及以上。
    注:内核版本(64bit)2.6.23到4.0具体以实际情况为准。
    提供so格式文件及GCC、JAVA调用示例,其他语言完善中。
3)Android平台:
     提供aar格式文件及Android Studio调用示例
4)苹果ios平台:
     提供xcframework格式文件及xcode+objective-c调用示例

具体参考相关说明

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

  1. c语言文件pt是什么意思,C语言文件p的pt.ppt

    C语言文件p的pt ● 格式读函数一般形式为 fscanf(文件指针,格式控制,地址表) 从指定的文件中按格式读数据. 必须指出的是,fprintf() 函数与fscanf()函数是对应的,即在使用 ...

  2. C语言文件读写常用函数总结

    C语言文件读写常用函数总结 有点小头疼这几天复习,可是总是有些小可爱问有关C语言文件方面的内容,在此写篇博文一劳永逸. 目录 C语言文件读写常用函数总结 fopen函数 fclose函数 fseek函 ...

  3. Atom 编辑器安装 linter-eslint 插件,并配置使其支持 vue 文件中的 js 格式校验

    安装linter-eslint插件方式有如下几种. 1. 最简单的方式就是  点击 File -Settings -Install ,搜索linter-eslint ,安装即可 2. # 进入atom ...

  4. Android系统中如何得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)

    在Android平台下,办公系统,ERP,CRM等开发过程中,需要对Doc, docx, xls, xlsx, ppt, ppts, pdf, html等各种格式的文件内容进行搜索和查找,实现这些格式 ...

  5. Linux 平台下如何使用GCC得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)

    在文件数据挖掘处理技术中,如何从文本数据中抽取有价值的信息和知识是一个重要的数据挖据分支,是机器学习.自然语言处理.数理统计的基础技术之一,是信息检索,机器学习,AI智能等高端技术的的底层技术支持之一 ...

  6. Linux + JAVA得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)

    在文件数据挖掘处理技术中,如何从文本数据中抽取有价值的信息和知识是一个重要的数据挖据分支,是机器学习.自然语言处理.数理统计的基础技术之一,是信息检索,机器学习,AI智能等高端技术的的底层技术支持之一 ...

  7. Windows+GCC得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)

    Graccvs组件智能分析提取其他各种文件中文本,为自然语言信息检索,机器学习等高端技术提供底层支持的技术组件,是Lucene/CLucene, Elasticsearch, Sphinx等全文检索工 ...

  8. python实现:命令行翻译.string 和 .xml 文件 -- mkTranslate:支持多种语言的互译

    [github传送门] 功能 翻译文本文件 翻译.strings文件 翻译.xml文件 翻译 文本 支持谷歌翻译 支持有道翻译 支持 i18ns.com 聚合翻译 会自动检测当前网络情况,从而决定使用 ...

  9. 总结:m文件转化为c/c++语言文件,VC编译

    fork (撒哈拉沙漠的沙)                于 Thu Dec  4 00:56:56 2003 说道: 发信人: fork (撒哈拉沙漠的沙), 信区: Matlab 标  题: 总 ...

最新文章

  1. 子网掩码和网络ID的快速计算方法
  2. MySQL协议包说明
  3. ACL 2022 | 清华大学、DeepMind等指出现有小样本学习方法并不稳定有效,提出评价框架...
  4. java求质数为什么%3ci 2_C语言程序设计部分习题及例题参考程序
  5. HarmonyOS之系统设置项的查询和使用
  6. day21 面向对象之继承和组合
  7. crontab 改成只读模式_以“三合一”模式推动提质增效 助力公司高质量发展
  8. JAVA编程相关:eclipse如何导入已有工程
  9. 华为、三星都崴了脚:石墨烯充电还有戏吗
  10. php mysql自动反转义_ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法...
  11. 《那些年啊,那些事——一个程序员的奋斗史》——65
  12. 孪生神经网络_驾驶习惯也能识人?基于时空孪生神经网络的轨迹识别
  13. 黑客之门的魅力:感染与加载
  14. JasperReport 默认打印机打印/指定打印机打印
  15. 【课后习题】高等数学第七版下第十二章 无穷级数 第二节 常数项级数的审敛法
  16. ARDUINO:控制两台步进电机同步运转
  17. 新学期|新气象,青春有为,不负韶华
  18. 书桌台灯怎么选?分享儿童卧室灯品牌
  19. [C语言] 制作一个控制台的电子时钟
  20. 一键安装Lnmp教程

热门文章

  1. 笔记:新手SEOer必备的WordPress优化插件
  2. 关于“智能革命”的分析与思考
  3. A State-of-the-Art Survey on Deep Learning Theory and Architectures论文翻译分析
  4. 客户端解析html5,基于HTML5的WebGIS实时客户端设计
  5. 用前端代码编写一个动态的罗盘时钟
  6. elasticsearch—索引与检索(一)
  7. u盘制作启动盘 安装win10操作系统
  8. 百度APP-Android H5首屏优化实践
  9. [VB.net]绘制具有渐变颜色和防锯齿字体的标题
  10. python10086查询系统_Python数字移动设备取证