Laravel 5:输出tFPDF

时间:2017-11-18 09:51:22

标签: php pdf laravel-5 fpdf

我想在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?

1 个答案:

答案 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