在perl中将Outlook htmlrtf转换为html

我设法使用 Email::Outlook::Message 从 Outlook .msg 中提取了 RTF 部分。这是它的外观:

{\*\htmltag84 <b>}\htmlrtf {\b \htmlrtf0
{\*\htmltag148 <span lang="EN-US" style="font-size:12.0pt;color:#002060;mso-fareast-language:EN-IN">}\htmlrtf {\lang1033 \htmlrtf0 FooBar
{\*\htmltag156 </span>}\htmlrtf }\htmlrtf0 
{\*\htmltag92 </b>}\htmlrtf }\htmlrtf0

当 Outlooks 发送 Internet 邮件时,它会将 RTF 转换为文本/html:

<b><span style="font-size:12.0pt;color:#002060;mso-fareast-language:EN-IN">FooBar</span></b>

我正在尝试使用 RTF::HTML::Converter 做同样的事情,但它删除了所有样式:

<b>FooBar</b>

脚本如下:

use strict;
use RTF::HTML::Converter;
my $object = RTF::HTML::Converter->new(
        output => \*STDOUT
);
local *RTF_FILE;
open RTF_FILE,"$ARGV[0]" or die $!;
$object->parse_stream( \*RTF_FILE );

我还尝试了 unrtf 工具。它还去除了样式:

<font face="Arial"><font size="3"><b>FooBar</b></font></font>
wxp1818118 回答:在perl中将Outlook htmlrtf转换为html

在您的示例中,rtf 控制字看起来是多余的,并由 \htmlrtf \htmlrtf0 包裹。对于您的用例来说,完全剥离它们并仅使用 html 标签可能就足够了。 (如果您有更高级的格式或嵌入图像等,这种幼稚的方法可能会失效。)

use strict;
use warnings;


while (my $line = <>){
    $line =~ s|\\htmlrtf.*?\\htmlrtf0||;
    $line =~ s|{\\\*\\htmltag\d+([^}]*)}|$1|;
    print $line;
}
perl test.pl test.rtf
 <b>
 <span lang="EN-US" style="font-size:12.0pt;color:#002060;mso-fareast-language:EN-IN"> FooBar
 </span> 
 </b>
,

您需要解析 RTF 来提取 HTML,我不知道有任何库可以这样做。

如果使用 Redemption 是一个选项,它会公开 RDOSession.GetMessageFromMsgFile,它返回 RDOMail 对象 - 您可以读取它的 HTMLBody 属性;它将为您从 RTF 中提取 HTML。

本文链接:https://www.f2er.com/215344.html

大家都在问