Генерировать строки таблицы RTF из цикла PHP

Я пытаюсь сгенерировать RTF документ. У меня есть шаблон RTF, который имеет первую строку таблицы (заголовки). Остальные строки генерируются из PHP динамически. Я просмотрел исходный документ RTF и скопировал код для конкретной строки, я заменил текст на имена переменных типа:

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

Скрипт работает, на стороне PHP все работает, генерирует заменяет переменные. Но я получаю сообщение об ошибке, как только я пытаюсь открыть созданный документ RTF:

Таблица в этом документе повреждена.

Мой код RTF для генерации внутри цикла PHP таков:

\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, есть ли где-нибудь ошибка синтаксиса? Пожалуйста помоги.

1 ответ

Решение

Ваш 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
}
Другие вопросы по тегам