rtf是一种常见的图文混编格式文件,有时需要提取其中的文本内容,曾经遍寻网络都没有找到好的解决方案,以前曾经使用过一个方案是在Linux下安装soffice,使用命令:soffice --headless --invisible --convert-to html /home/www/XZ20181211145829028.rtf 进行转换成带图文的Html,这次由于程序在windows下运行,且也不可能让每个用户都安装soffice,或使用写字板、Word程序转换效率太低,最后不得已写出了以下简陋代码,基本实现了转文本的功能。
闲话少说,上代码:
void rtf2txt(string rtf, string &txt)
{
txt = regex_replace(rtf, regex("\\\\[a-z0-9]+"), ""); //过滤rtf指令
txt = regex_replace(txt, regex("\\{\\s*[0-9a-f\\n\\r;]+\\}"), ""); //过滤嵌入图片数据
string buf = "";
int startpos = txt.find("\r\n") + 2;
int endpos = txt.rfind("}") - 1; //跳过首尾的大括号
int i = startpos;
while (1)
{
if (i > endpos) break;
if (txt[i] == '\\') //经过以上过滤后此处出现的都是汉字了
{
char t1[4], t2[4];
string tc = txt.substr(i, 8);
sscanf_s(tc.c_str(), "\\\'%2x\\\'%2x", &t1, &t2, 1); //提取汉字的编码
buf += t1[0];
buf += t2[0];
i += 8;
}
else
{ //非特殊符号不做处理
buf += txt[i];
i++;
}
}
txt = buf;
}
以上代码没有经过广泛的测试,仅满足自用,希望能帮到用得着的人。