我正在努力使用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
}
答案 0 :(得分:4)
我在使用大文件和TCPDF时遇到了麻烦。我从TCPDF切换到mPDF。该项目基于FPDF和HTML2PDF,使用HTML解析速度更快。
e.g。 TCPDF花了大约70到80秒的文章详细概述(150页有图片,链接和一些东西)。
相同的HTML代码和刚刚用mPDF类替换的相同PHP脚本和函数只需6到8秒即可创建相同的PDF。
答案 1 :(得分:3)
回答问题1:
嗯,这是由于我对PHP经验不足造成的另一个问题。空白PDF是由PHP的默认max_execution_time设置为30秒产生的。我使用ini_set
为PDF生成脚本将值设置为300,并且我的报告已完整生成。
对于16页PDF,生成需要1分30秒。对于拥有更多TCPDF经验的人来说,这似乎有点长吗?
回答问题3:
我做了一些实验,使用TCPDF中的直接PDF函数生成PDF肯定比将HTML和CSS传递给TCPDF然后让它创建PDF更快。有道理,但仍然很高兴看到实际的性能差异。因此,尽管为PDF调用创建布局很繁琐,但如果您有大型PDF,性能提升可能是值得的。
问题2:
我仍然会感谢更有经验的PHP用户对ob_start的使用。