FPDF获取“错误的输出目标”,但错误代码显示了正确的目标

时间:2019-05-23 14:55:50

标签: php laravel vue.js fpdf fpdi

我正在尝试使用FPDF和FPDI编辑PDF并向其中添加文本。我一直收到“错误的输出目标”错误,但是目标是我希望它在其中创建文件的正确位置,为什么FPDF不喜欢我的输出目标?

这是在laravel项目中

    $pdf = new \setasign\Fpdi\Fpdi();
    $pdf->AddPage();
    $pdf->setSourceFile(public_path('/pdf/higher.pdf'));
    $tplIdx = $pdf->importPage(1);
    $pdf->useTemplate($tplIdx, 10, 10, 100);
    $pdf->SetFont('Helvetica');
    $pdf->SetTextColor(255, 0, 0);
    $pdf->SetXY(30, 30);
    $pdf->Write(0, 'This is just a simple text');
    $pdf->Output(public_path('/pdf/'),'higher2');
    return $pdf;

,错误是:

 message: "FPDF error: Incorrect output destination: /home/vagrant/code/project-name/public/pdf/"

我也尝试过删除“ public_path()”并将其设置为Output('pdf', 'higher2'),但那里也没有用。

此外,我还尝试将输出pdf的名称更改为higher2.pdf,以防万一它想查看扩展名(但显然,目的地而不是名称存在更多问题)

我什至尝试将此文件夹的权限更改为任何人都可写:

drwxrwxrwx  5 ion  staff    160 May 21 05:44 pdf

edit:请注意,由于某种原因,我看到带有public_path()的方法试图将其保存到我的vagrant文​​件夹中,这是我感到困惑的部分原因。当我尝试不使用public_path()保存到'/ pdf'时,出现此错误:

 message: "FPDF error: Incorrect output destination: /pdf/"

修改2:

我也尝试过:

$pdf->Output('F','/pdf/higher2.pdf');

并显示错误:

message: "file_put_contents(/pdf/higher2.pdf): failed to open stream: No such file or directory"

,还尝试了pdf的原始名称,该名称确实存在并且出现了相同的错误:

$pdf->Output('F','/pdf/higher.pdf');

3 个答案:

答案 0 :(得分:1)

Output()方法要求第一个参数为目的地,第二个参数为文件名。

来自文档:

  

F:使用名称指定的名称(可能包含路径)保存到本地文件。

尝试一下:

$filename="/pdf/higher2.pdf";
$pdf->Output($filename,'F');

答案 1 :(得分:1)

永远不要覆盖正在读取的文件!

Output()方法的签名是:

string Output([string dest [, string name [, boolean isUTF8]]])

$dest参数定义为:

  

将文档发送到的目的地。可以是以下之一:

I: send the file inline to the browser. The PDF viewer is used if available.
D: send to the browser and force a file download with the name given by name.
F: save to a local file with the name given by name (may include a path).
S: return the document as a string.
     

默认值为I。

所以您的代码:

$pdf->Output(public_path('/pdf/'),'higher2');

完全没有道理。我猜您想将生成的PDF以名称higher2.pdf保存到公共区域的路径中。因此您的代码应如下所示:

$pdf->Output('F', public_path('/pdf/higher2.pdf'));

PS:You cannot edit a PDF with FPDI

答案 2 :(得分:0)

对于FPDF软件包,语法$pdf->Output('F','/pdf/higher2.pdf');是错误的,您需要按照Jan Slabon的说明调整呼叫。

但是,如果要支持UTF-8字符,则需要tFPDF软件包,而setasign供应商也支持该软件包:

$pdf = new \setasign\Fpdi\Tfpdf\Fpdi();

对于此软件包,您可以像这样存储输出:

$pdf->Output('/pdf/higher2.pdf');