导出的RTF文档中的记录未循环

时间:2012-04-09 17:49:36

标签: php export rtf

我通过PHP将内容从MySQL数据库导出到Word模板(RTF)。

有一个部分“附录B”,它应显示为记录找到的所有缩略语。此部分出现的最小记录是90(即这些是每条记录将具有的标准首字母缩略词(tblAcronyms));但是最大记录是未知的,因为用户可以添加到此列表中(tblAppendixB)。

Word(即RTF)文档应显示找到的所有记录,但是,它只显示第一条记录。

这就是我到目前为止:

<?php
....

#Retrieve Appendix B records
$qry_get_AppB = "SELECT vAcronym, vAcronymDesc FROM tblAcronyms
                   UNION SELECT vAcronym, vAcronymDesc FROM tblAppendixB
                     WHERE fkID = ". $i_fk_id . " ORDER BY vAcronym ASC";
$qry_appb_result = mysql_query($qry_get_AppB);
$qryAppBno_rows = mysql_num_rows($qry_appb_result);    

//Generate the headers to help a browser choose the correct location
header('Content-Type: application/msword');
header('Content-Disposition: inline; filename="'.$vProgramName.'_rec.rtf");

//Open the template file
$tfilename = 'Appb_Template.rtf';
$fp = fopen($tfilename, 'r');

//Read the template into a variable
$toutput = fread($fp, filesize($tfilename));

fclose($fp);

//Replace the place holders in the template with data
if($qryAppBno_rows > 0)
{
  while($rowAppB = mysql_fetch_array($qry_appb_result)) 
  {
     $vAppB = $rowAppB['vAcronym'] . '-' . $rowAppB['vAcronymDesc'] . "\r\n";
     $toutput = str_replace('<<vAppB>>', $vAppB, $toutput);
  }
}

//Send the generated document to the browser
echo $toutput;

?>

我搜索了这个论坛和其他人,但尚未找到解决方案。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

好的,我不太确定你的模板是什么样的,但我想,你只有一个名为<<vAppB>>的占位符。在第一次迭代中(如果有可用的数据),用第一个数据条目替换该占位符。在这个事实中,只显示了一个占位符。

可能会将您的代码重写为与此类似的内容

... //do your stuff
$newLine = "\r\n";
$appendix = "";
while($rowAppB = mysql_fetch_array($qry_appb_result)) {
    $appendix .= $rowAppB['vAcronym'] . '-' . $rowAppB['vAcronymDesc'] . $newLine;
}
$toutput = str_replace('<<vAppB>>', $appendix, $toutput);
...//do some other stuff

只需简单的原型设计,因此您可能需要做一些额外的工作。

诀窍在于collect您获得的所有条目,而不是用占位符替换它:)

答案 1 :(得分:0)

我解决了这个问题;对于MS Word(RTF),我必须使用“\ par”而不是“\ r \ n”来将其识别为段落标记。以下是现在可以使用的修改后的代码:

<?php
....

$t_newline = "\par";

#Retrieve Appendix B records
$qry_get_AppB = "SELECT vAcronym, vAcronymDesc FROM tblAcronyms
               UNION SELECT vAcronym, vAcronymDesc FROM tblAppendixB
                 WHERE fkID = ". $i_fk_id . " ORDER BY vAcronym ASC";
$qry_appb_result = mysql_query($qry_get_AppB);
$qryAppBno_rows = mysql_num_rows($qry_appb_result);    

//Generate the headers to help a browser choose the correct location
header('Content-Type: application/msword');
header('Content-Disposition: inline; filename="'.$vProgramName.'_rec.rtf");

//Open the template file
$tfilename = 'Appb_Template.rtf';
$fp = fopen($tfilename, 'r');

//Read the template into a variable
$toutput = fread($fp, filesize($tfilename));

fclose($fp);

//Replace the place holders in the template with data
if($qryAppBno_rows > 0)
{
   while($rowAppB = mysql_fetch_array($qry_appb_result)) 
   {
       $vAppendixB[] = $rowAppB['vAcronym'] . '-' . $rowAppB['vAcronymDesc'] . $t_newline;
       $vAppB = implode(" ", $vAppendixB);
   }
}

$toutput = str_replace('<<vAppB>>', $vAppB, $toutput);

//Send the generated document to the browser
echo $toutput;

?>

希望这会帮助别人。 : - )