我想在Laravel 5.5中使用tFPDF。我添加了包含composer的包,然后我尝试根据docs输出它,但没有任何效果。
我尝试将其直接输出到浏览器:
Route::get('/test',function(){
$pdfLibrary = new tFPDF\PDF();
$pdfLibrary->AddPage();
$pdfLibrary->AddFont('DejaVuSansCondensed', '', 'DejaVuSansCondensed.ttf', true);
$pdfLibrary->SetFont('DejaVuSansCondensed', '', 14);
$pdfLibrary->Write(8, 'Hallo!');
$pdfLibrary->output();
});
但是这只是空白。当我尝试return $pdfLibrary->output();
时
然后它就回来了
%PDF-1.3 3 0 obj<> endobj 4 0 obj<>流x�u����@S�)> +�p�.......
我还尝试将pdf简单地保存到文件中,但即使是
$pdfLibrary->output('F', storage_path() . '/test.pdf');
没用。
我如何保存&输出由tFPDF创建的pdfs?
答案 0 :(得分:2)
<强>更新强>
这是如何在Laravel中将原始二进制文件显示为pdf
\Response::make($this->output(), 200, ['content-type'=>'application/pdf', 'Content-Disposition' => 'inline; temp.pdf']);
*过时的回答
我终于意识到tFPDF的非官方作曲家版本稍微改变了output
函数的行为。输出函数只返回pdf内容,但不能将其保存到文件中,也不能直接在浏览器中呈现。
所以而不是
$pdfLibrary->output('file.pdf');
必须使用
Storage::put('file.pdf', $pdfLibrary->output());
或file_put_contents
如果没有使用Laravel。
如果想直接在浏览器中呈现它,可以使用
return response()->file($pathToFile);
最后一点:永远不要更改字体名称。这将在DocnetUK / tfpdf版本中引发错误,但它当然会在tfpdf的官方版本中发挥作用。
<强>更新强>
应该注意的另一件事是,非官方作曲家版本将方法tFPDF
更改为__construct
,这是必要的,因为命名空间(请参阅What's difference between __construct and function with same name as class has?)。
但是,这意味着扩展tfpdf类并且其中包含构造函数的所有类都需要像这样调用父构造函数:
class Document extends \tFPDF\PDF
{
public function __construct(){
parent::__construct();
// ... your code for constructor.
}
//....
}
变量名称也已更改:
$this->w
=&gt; $this->flt_current_width
$this->h
=&gt; $this->flt_current_height