【发布时间】:2017-02-24 19:07:18
【问题描述】:
我有大量数据需要使用 Codeigniter 处理并添加为 PDF 中的表格。 PDF 包含一些 HTML 元素、图像、图标,并且需要使用 CSS 进行大量对齐。
所以,为了实现这个目标,我进行了一些搜索并检查了哪个 PDF 生成插件适合我。因此,我没有选择 FPDF、TCPDF 或 HTMLTOPDF、mPDF 等,而是选择了 DOMPDF,因为它支持大多数 css 样式,并且也符合我的目的。
最初,它运行良好,因为数据量不大,10-20 页的 PDF 生成良好。但是,随着数据的增加并且需要在我的 PDF 中放置大约 35-45 页,系统会超时。
所以,我更改了服务器设置,并将“4GB RAM 和 1 个 CPU 改为 8GB RAM 和 4 个 CPU”。并且,将 max_execution_time 增加到 90,将 memory_limit 增加到 384M,但 DOMPDF 仍然无法呈现页面超过 35 页的大型 PDF。
我已将横向模式设置为下载 PDF 而不是保存它。
下面是我的 Codeigniter 控制器中的 PHP 代码。
$this->load->library('pdf');
$teaminfo=$this->pdf_model->getTeamName($teamid);
$data=array();
if($teaminfo != false)
{
$teamname=$teaminfo->team_name;
$data['teamname']=$teamname;
$formateddate=date('F j, Y');
$data['teammeetingdate']=$formateddate;
//add code to get and pass the terms and replacement array
$termsList=$this->getTermsArray($teamid);
$data['searchterms']=$termsList['searchterms'];
$data['replacement']=$termsList['replacement'];
//get teammeeting roster
$data['rosterlist']=$this->getRostertable($teamid);
$personwisedata=$this->getteammemberData($teamid);
$data['personwiseData']=$personwisedata;
$kmresponse=$this->get_last_six_month_keymetrics_details_by_userid_without_owner($teamid);
$data['noownerkmdata']=$kmresponse;
//set pdf title
$teamnametitle='My PDF Notes - '.$teamname.' '.date("m.d.Y");
$pdftitle=$teamnametitle.'.pdf';
$this->pdf->set_paper('a4', 'landscape');
$this->pdf->set_option( 'enable_font_subsetting' , true );
$this->pdf->load_view('backend/Pdf/teammeeting_pdf', $data);
$this->pdf->render();
$this->pdf->stream($pdftitle,array("Attachment" => 0));
}
对于小尺寸的 PDF,它可以正常工作。但是,当长 PDF 需要生成执行停止并在页面上显示错误“Internal Server Error”时。
当我通过退出在浏览器上打印输出时,它会在一分钟内工作,但是当我发送该 html 以在 PDF 上呈现并流式传输时,系统会停止执行。
我尝试通过 htaccess 和 ini_set 设置 max_execution_time 和 memory_limit 但它没有帮助我。
希望有人能帮助我。
【问题讨论】:
-
我知道这是一个老问题,但前段时间我遇到了类似的问题。您正在使用的视图 (
backend/Pdf/teammeeting_pdf) 是否嵌入了大型外部 CSS,例如 bootstrap 或类似的?
标签: php css codeigniter pdf dompdf