PHP/FPDI:“警告:fopen:无法打开流:没有这样的文件或目录”和“错误:未捕获的 InvalidArgumentException:未给出流”

问题描述

我正在尝试使用 FPDI/FPDF 从我项目中的本地路径获取现有 PDF 文件。 我按照说明操作,尝试正确制作,但我总是尝试导入 PDF 文件的命令(即使在我的本地主机或我的服务器中)我收到消息:

警告:fopen(doc/certificado.pdf):无法打开流:没有这样的 D:\Program 中的文件或目录 Files\ampps\www\certificado\utils\fpdi2\src\PdfParser\StreamReader.PHP 第 43 行

致命错误:未捕获的 invalidargumentexception:未提供流。在 D:\程序 Files\ampps\www\certificado\utils\fpdi2\src\PdfParser\StreamReader.PHP:105 堆栈跟踪:#0 D:\Program Files\ampps\www\certificado\utils\fpdi2\src\PdfParser\StreamReader.PHP(44): setasign\Fpdi\PdfParser\StreamReader->__construct(false,true) #1 D:\程序 Files\ampps\www\certificado\utils\fpdi2\src\FpdiTrait.PHP(172): setasign\Fpdi\PdfParser\StreamReader::createByFile('doc/certificado...') #2 D:\Program Files\ampps\www\certificado\utils\fpdi2\src\FpdiTrait.PHP(211): setasign\Fpdi\Fpdi->getPdfReaderId('doc/certificado...') #3 D:\Program Files\ampps\www\certificado\utils\gerarpdf.PHP(10): setasign\Fpdi\Fpdi->setSourceFile('doc/certificado...') #4 {main} 扔在 D:\Program Files\ampps\www\certificado\utils\fpdi2\src\PdfParser\StreamReader.PHP 在线 105

这是我的代码调用 FPDI:

<?PHP
use setasign\Fpdi\Fpdi;

require_once('fpdf181/fpdf.PHP');
require_once('fpdi2/src/autoload.PHP');

$pdf = new Fpdi();

$pdf->AddPage(); 
$pdf->setSourceFile('doc/certificado.pdf'); 
$tplIdx = $pdf->importPage(1); 
$pdf->useTemplate($tplIdx); 
$pdf->SetFont('Arial','B','15'); 
$pdf->SetXY(90,50);
$pdf->Write(10,'Test of typing something.');

$pdf->Output('I','doc/generated.pdf');

?>

解决方法

校正可以通过两个选项完成,结果相同:

$pdf->setSourceFile(__DIR__ . "/../doc/certificado.pdf");
or
$pdf->setSourceFile('..\doc\certificado.pdf');