【发布时间】:2012-01-10 15:58:42
【问题描述】:
我正在使用 TCPDF 实施报告生成解决方案。我的一些报告很小(2-3 页),但用户可以选择一次选择多个报告,然后全部请求。
目前我生成一个包含所有报告的 PDF,每个报告都从一个新页面开始,并使用页面分组,以便为每个报告重新开始页码。当它工作时,它工作得很好,但在我选择了太多报告后,代码就会流失,我最终得到一个空的 PDF。
更新:我应该提到创建单个 PDF 是客户的要求。他们希望有一个 PDF 目录,以便在选择了许多报告时在单个 PDF 中的报告之间轻松切换。
我的问题是:
在不产生空白 PDF 的情况下生成此 PDF 的最有效方法是什么?我似乎无法找到 TCPDF 可以处理的大小是否有限制。
我应该在 PHP 中使用 ob_start() 还是按照我的方式构建一个大字符串?
我的报告最初是 HTML,所以我发送该 TCPDF。但是,如果我使用其他方法输出信息(例如 Cell、MultiCell 等),TCPDF 的性能会更好吗?
这是我输出 PDF 的一段代码。 $pdf 对象是根据库中包含的相关 TCPDF 示例设置的:
foreach ($students_info as $student_info) {
$info = $student_info->fetch_object(); // get query result object
// put in the student information
$pdf->set_student_info($info->lastName, $info->firstName, $info->rank, $info->idNum);
$pdf->startPageGroup(); // start a page group to handle paging for multiple students
$pdf->AddPage(); // add a page
$html = "<style>";
$html .= file_get_contents(/*some style sheet*/);
$html .= file_get_contents(/*some other style sheet*/);
$html .= "</style>";
$html .= start_report_div($i);
$html .= '<table class="report_table">'.
'<tbody>'.
'<tr><td>';
$html .= display_report_title($report);
$html .= display_student_info($db, $info);
$html .= display_academic_comments_body($db, $info->studentID, $info->sessionID);
$html .= display_signature_block($report);
$html .= '</td></tr>'.
'</tbody>'.
'</table>';
$html .= end_report_div();
$pdf->writeHTML($html, // the content
true, // put a newline after text
false, // paint background, false = transparent
true, // reset last cell height
false, // add left padding
'' // align
);
$html = ''; // reset for next student
$pdf->lastPage(); // pointer to last page in case we are doing more than one student
}
【问题讨论】:
-
我会生成很多小报告并生成一个 ZIP 文件供用户下载,其中包含所有 PDF 文件。
-
有效的想法,但不是客户想要的。他们希望在一个文档中包含 PDF 目录中的报告,以便他们轻松地从报告切换到报告(学生信息到学生信息)。
-
为什么投反对票?我讨厌没有评论就投反对票。
-
我也是。这就是为什么我 +1 让你否定它。
-
@Truth 谢谢。我根据要求更新了内容,希望避免混淆。我已经对此进行了研究,并且我的代码是一个好的开始,所以我不确定为什么有人会拒绝投票。我只有在遇到困难并觉得自己已经用尽其他选择后才来到这里。
标签: php pdf pdf-generation tcpdf