vc rtf转txt

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;
}

以上代码没有经过广泛的测试,仅满足自用,希望能帮到用得着的人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值