PHP中有没有办法访问压缩的RTF并输出RTF代码

时间:2012-05-29 13:36:27

标签: php rtf

PHP中有没有办法访问压缩的RTF并将RTF代码输出到浏览器?

我在SQL中有一个文本列,我想从中提取RTF - 我已设法将数据输出为0x1F8B

我相信这些数据是压缩的RTF - http://www.freeutils.net/source/jtnef/rtfcompressed.jsp

使用[MS-OXRTFCP]:RTF格式(RTF)压缩算法http://msdn.microsoft.com/en-us/library/cc463890%28v=exchg.80%29

示例数据:

0x1F8B0800000000000000654E316EC3300CEC5CA07FE0D6AD909D1628E0A1C8D01F74E422CB94CD46A11C4A6E5018F97B6967EC72381EC9BB5B516B6CD04BE11DC23C36ED5B8B03C5E8364C5EC6C61D0E2BC62CB5F6C988C358AE5C0AC6592F2DC630792D541D1C957DEA6E76D260144EFF57B7A7C715434E59CD0A3A541A1C8E4A240EFBB490EBEC027F98AE2796E11597D0E0EC75C013D1BC8360F1EF0EC316B115695BF89A08CE390B70816ABC571EA74AA542EEBF295460D975642B069F5EEBF45C6CB27707E5F4FBB14558EC1D83D9EEEC28D9BE142E8B59719697BB6C051FFE00D09796A337010000

这看起来像我想要的,但它在VB http://www.vbforums.com/attachment.php?attachmentid=87371&d=1326754610

2 个答案:

答案 0 :(得分:7)

您的数据样本是gzip压缩数据,请使用gzdecode对其进行解码。您需要传递二进制字符串而不是提供的十六进制字符串(使用hex2binpack进行转换)

if (!function_exists(hex2bin)){
    function hex2bin($hexStr){
        return pack('H*', $hexStr);
    }
}
$rtf = gzdecode(hex2bin('1F8B0800000000000000654E316EC3300CEC5CA07FE0D6AD909D1628E0A1C8D01F74E422CB94CD46A11C4A6E5018F97B6967EC72381EC9BB5B516B6CD04BE11DC23C36ED5B8B03C5E8364C5EC6C61D0E2BC62CB5F6C988C358AE5C0AC6592F2DC630792D541D1C957DEA6E76D260144EFF57B7A7C715434E59CD0A3A541A1C8E4A240EFBB490EBEC027F98AE2796E11597D0E0EC75C013D1BC8360F1EF0EC316B115695BF89A08CE390B70816ABC571EA74AA542EEBF295460D975642B069F5EEBF45C6CB27707E5F4FBB14558EC1D83D9EEEC28D9BE142E8B59719697BB6C051FFE00D09796A337010000'));

这是原始数据。

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}{\f1\fnil\fcharset0 Arial;}}
{\colortbl ;\red0\green0\blue0;}
\viewkind4\uc1\pard\keep\keepn\sa80\cf1\f0\fs22 The moon is the brightest object in the \i\f1 Earth's \i0\f0 sky?\par
\par
\cf0\par
Another question.\par
}

这是渲染的文字。

  

月亮是地球天空中最亮的物体?

     

另一个问题。

我不确定你是否只需要原始rtf或渲染,如果你想在html中使用rtf,请查看Free (preferably) PHP RTF to HTML converter?

答案 1 :(得分:6)

我不能告诉你是否

0x1F8B0800000000000000654E316EC3300CEC5CA07FE0D6AD909D1628E0A1C8D01F74E422CB94CD46A11C4A6E5018F97B6967EC72381EC9BB5B516B6CD04BE11DC23C36ED5B8B03C5E8364C5EC6C61D0E2BC62CB5F6C988C358AE5C0AC6592F2DC630792D541D1C957DEA6E76D260144EFF57B7A7C715434E59CD0A3A541A1C8E4A240EFBB490EBEC027F98AE2796E11597D0E0EC75C013D1BC8360F1EF0EC316B115695BF89A08CE390B70816ABC571EA74AA542EEBF295460D975642B069F5EEBF45C6CB27707E5F4FBB14558EC1D83D9EEEC28D9BE142E8B59719697BB6C051FFE00D09796A337010000

实际上是压缩的RTF数据。但如果是这样,Zarafa's PHP MAPI Extension会提供解压缩功能:mapi_decompressrtf()