我正在尝试生成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语法,我在某处有语法错误吗?请帮忙。
答案 0 :(得分: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.rtf
RTF示例
{\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
}