使用 TCPDF 创建大型 PDF 的最有效方法是什么?

Car*_*ton 4 php pdf pdf-generation tcpdf

我正在努力使用 TCPDF 实施报告生成解决方案。我的一些报告很小(2-3 页),但用户可以选择一次选择许多报告,并请求所有报告。

目前,我生成一个包含所有报告的 PDF,每个报告都从一个新页面开始,并使用页面分组,以便为​​每个报告重新启动页码编号。当它工作时,它工作得很好,但是当我选择了太多报告后,代码就消失了,我最终得到了一个空的 PDF。

更新:我应该提到创建单个 PDF 是客户的要求。他们希望拥有一个 PDF 目录,以便在选择多个报告时能够在单个 PDF 内的报告之间轻松切换。

我的问题是:

  1. 生成此 PDF 而不最终得到空白 PDF 的最有效方法是什么?我似乎找不到 TCPDF 可以处理的大小是否有限制。

  2. 我应该在 PHP 中使用 ob_start() 还是像我做的那样构建一个大字符串?

  3. 我的报告最初是 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。