0

我正在尝试生成 RTF 文档。我有一个具有第一行表格(标题)的 RTF 模板。其余的行是从 PHP 动态生成的。我查看了 RTF 文档的源代码并复制了特定行的代码,我用一些可变类型的名称替换了文本:

%%a%% - means that in my PHP code, it looks for %%a%% and replaces with some text

该脚本有效,PHP 端一切正常,它生成替换变量。但是,当我尝试打开生成的 RTF 文档时,我得到一个错误:

此文档中的表已损坏。

我在 PHP 循环中生成的 RTF 代码是这样的:

\trowd \irow1\irowband1\ts18\trgaph108\trleft-813\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 
\trftsWidth3\trwWidth10795\trftsWidthB3\trftsWidthA3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tbllkhdrrows\tbllklastrow\tbllkhdrcols\tbllklastcol \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr
\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth1728\clshdrawnil \cellx915\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth1620\clshdrawnil \cellx2535\clvertalt\clbrdrt
\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth1260\clshdrawnil \cellx3795\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 
\cltxlrtb\clftsWidth3\clwWidth1440\clshdrawnil \cellx5235\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth1440\clshdrawnil \cellx6675\clvertalt\clbrdrt\brdrs\brdrw10 
\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth1440\clshdrawnil \cellx8115\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 
\cltxlrtb\clftsWidth3\clwWidth1867\clshdrawnil \cellx9982\row }\pard\plain \qj \li0\ri0\sl360\slmult1\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid9917761\yts18 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {
\f37\fs20\insrsid5056707 %%a%%}{\f37\fs20\ul\cf6\insrsid5335176\charrsid15606364 \cell }{\f37\fs20\insrsid5056707 %%b%%}{\f37\fs20\ul\cf6\insrsid5335176\charrsid15606364 \cell }{\f37\fs20\insrsid5056707 %%c%%}{
\f37\fs20\ul\cf6\insrsid5335176\charrsid15606364 \cell }{\f37\fs20\insrsid5056707 %%d%%}{\f37\fs20\ul\cf6\insrsid5335176\charrsid15606364 \cell }{\f37\fs20\insrsid5056707 %%e%%}{\f37\fs20\ul\cf6\insrsid5335176\charrsid15606364 \cell }{
\f37\fs20\insrsid5056707 %%f%%}{\f37\fs20\ul\cf6\insrsid5335176\charrsid15606364 \cell }{\f37\fs20\insrsid5056707 %%g%%}{\f37\fs20\ul\cf6\insrsid5335176\charrsid15606364 \cell }\pard\plain 
\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f37\fs28\ul\cf6\insrsid5335176 

如果有人知道 RTF 语法,我在某处有语法错误吗?请帮忙。

4

1 回答 1

0

RTF根本无效,缺少标题、字体定义、未关闭}等。..

尝试

$template = "test/hey_main.rtf";
$newfile = "test/hey_x.rtf";

$rtf = file_get_contents($template);

$replace = array("%%no%%"=>1,"%%name%%"=>"Giorgi","%%Value%%"=>"Sample RTF");
$rtf = str_replace(array_keys($replace), array_values($replace), $rtf);

file_put_contents($newfile, $rtf)

hey_main.rtfRTF 示例

{\rtf1\ansi\ansicpg1252\deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\fswiss\fprq2\fcharset0 Calibri;}}
\viewkind4\uc1\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10 \trbrdrt\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3
\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx3084\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx6276\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx9468\pard\intbl\b\f1\fs22 No\b0\cell\b Name\b0\cell\b Value\b0\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10 \trbrdrt\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3
\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx3084\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx6276\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx9468\pard\intbl %%no%%\cell %%name%%\cell %%Value%%\cell\row\pard\sa200\sl276\slmult1\par
}
于 2012-10-25T23:21:53.327 回答