我正在尝试使用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');
答案 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'));
答案 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');