控制器:
public function test(){
$data = array();
$this->load->library('tcpdf');
$this->display_page($data);
}
test.php:(没有全部发布,因为有点长)
global $l;
$l = Array();
$l['a_meta_charset'] = 'UTF-8';
$l['a_meta_dir'] = 'ltr';
$l['a_meta_language'] = 'en';
$l['w_page'] = 'page';
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
-- pdf stuff --
$pdf->Output('example_007.pdf', 'I');
在 Chrome 中,它只是显示“无法加载 PDF 文档。”。没有错误,控制台中没有任何内容。 在 Firefox 中,它显示:“文件不以 '%PDF-' 开头。Local\EWH`_'s3-0y”。
Local\ 末尾的字符串在每次加载时随机出现。
我尝试过使用输出缓冲和刷新,但无济于事。我很茫然。
尝试在输出pdf后加上
exit;
。我希望它能像对我一样解决这个问题。
-- pdf 内容 --
$pdf->Output('example_007.pdf', 'I');
exit;
试试这个
ob_clean();
ob_flush();
$pdf->Output('example_007.pdf', 'I');
ob_end_flush();
ob_end_clean();
在生成发票之前,您可能会向浏览器输出一些内容。转到页面源代码,查看是否有任何内容,包括空格(换行或空格)并将其删除。
Duniyadnd 是正确的。当我查看 Chrome 调试工具中的网络响应时,我发现“%PDF-”魔法位于第二行而不是第一行。我在所需的包含文件中发现分隔符前后有一些空格,这些空格在 pdf 文件之前输出到浏览器。消除 php 分隔符前后的空白可以解决问题。
如果您使用 YII FRAMEWORK,请确保您 renderPartial 并且不在控制器中渲染视图
我在这个问题上挣扎了很长时间。以下是对我有用的:
require_once 'tcpdf/tcpdf.php';
ob_start();
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
.......
$pdf->lastPage();
ob_end_clean();
ob_clean();
$pdf->Output('payment_report_'.$debtor.'.pdf', 'D');
ob_end_flush();
exit;
注意:ob_start() 就在 $pdf = new TCPDF.... 上方,代码位于文件末尾。