Car*_*ton 4 php pdf pdf-generation tcpdf
我正在努力使用 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
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我在处理大文件和 TCPDF 时也遇到了麻烦。我从 TCPDF 切换到 mPDF。该项目基于 FPDF 和 HTML2PDF,并且通过 HTML 解析速度更快。
例如,TCPDF 需要大约 70 到 80 秒的时间来撰写文章详细信息概述(150 页,包含图片、链接和一些内容)。
相同的 HTML 代码和相同的 PHP 脚本只需替换为 mPDF 类和函数,只需 6 到 8 秒即可创建相同的 PDF。