TCPDF - Codeigniter - 无法加载 PDF 文档

问题描述 投票:0回答:6

控制器:

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\ 末尾的字符串在每次加载时随机出现。

我尝试过使用输出缓冲和刷新,但无济于事。我很茫然。

php codeigniter pdf tcpdf
6个回答
7
投票

尝试在输出pdf后加上

exit;
。我希望它能像对我一样解决这个问题。

-- pdf 内容 --

$pdf->Output('example_007.pdf', 'I');
exit;

3
投票

试试这个

ob_clean();
ob_flush();
$pdf->Output('example_007.pdf', 'I');
ob_end_flush();
ob_end_clean();

0
投票

在生成发票之前,您可能会向浏览器输出一些内容。转到页面源代码,查看是否有任何内容,包括空格(换行或空格)并将其删除。


0
投票

Duniyadnd 是正确的。当我查看 Chrome 调试工具中的网络响应时,我发现“%PDF-”魔法位于第二行而不是第一行。我在所需的包含文件中发现分隔符前后有一些空格,这些空格在 pdf 文件之前输出到浏览器。消除 php 分隔符前后的空白可以解决问题。


0
投票

如果您使用 YII FRAMEWORK,请确保您 renderPartial 并且不在控制器中渲染视图


0
投票

我在这个问题上挣扎了很长时间。以下是对我有用的:

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.... 上方,代码位于文件末尾。

© www.soinside.com 2019 - 2024. All rights reserved.