cva*_*man 7 php merge pdf-generation mpdf
我将首先说我可以使用mPDF生成PDF文件,但对于我的生活,我无法将现有的PDF与刚刚生成的PDF合并.
我需要弄清楚的是如何将现有的PDF附加/添加到新生成的PDF中.我尝试使用mPDF方法导入页面,但我能得到的是一个错误,如:
mPDF error: Cannot open '/downloads/test.pdf'.
Run Code Online (Sandbox Code Playgroud)
上面的消息含糊不清,为什么它无法打开文件...这里是我用来尝试合并PDF的代码:
include_once("./pdf/mpdf/mpdf.php");
$output_file = $_GET['output_file'];
$url = $_GET['input_file'];
$technical_drawing = $_GET['tech_drawing'];
$html = file_get_contents($url);
$mpdf = new mPDF('utf-8','Letter','','',0,0,0,0,0,0,'P');
$mpdf->SetImportUse();
$pagecount = $mpdf->SetSourceFile($technical_drawing);
$tplIdx = $mpdf->ImportPage($pagecount);
$mpdf->UseTemplate($tplIdx);
$mpdf->WriteHTML($html);
$mpdf->Output($output_file, 'D');
exit;
Run Code Online (Sandbox Code Playgroud)
$ output_file将是向用户显示的文件名.$ url是我们在PDF生成期间写入文件的HTML.$ technical_drawing是我们想要与生成的PDF追加/合并的PDF的相对路径.
我知道我可以使用像ghostscript这样的东西,但我在客户端的服务器上没有那种类型的访问权限.
让我知道是否有人使用mPDF找到了解决方案,或者如果我是SOL并且需要找到另一个库来进行PDF合并.我真的在寻找解决方案或建议,但不只是寻找其他图书馆的链接.我已经厌倦了我在谷歌或mPDF文档中找到的描述我所遇到的错误的内容.
编辑:将http://example.com/pdf/example.pdf中的mPDF错误更改为"/downloads/test.pdf".
EDIT_2:代码已修复为采用相对路径.
这是最终的工作代码.如果有人知道如何指定将HTML编写为PDF文档的顺序,将页面导入为最后一页(自定义页面大小与HTML的页面大小不同),则可获得奖励.
include_once("./pdf/mpdf/mpdf.php");
$output_file = 'test-' . $_GET['output_file'];
$url = $_GET['input_file'];
$technical_drawing = $_GET['tech_drawing'];
$html = file_get_contents($url);
if(!file_exists($technical_drawing)) {
$mpdf = new mPDF('utf-8','Letter','','',0,0,0,0,0,0,'L');
} else {
$mpdf = new mPDF('utf-8','A3-L','','',0,0,0,0,0,0,'L');
$mpdf->SetImportUse();
$pagecount = $mpdf->SetSourceFile($technical_drawing);
$import_page = $mpdf->ImportPage();
$mpdf->UseTemplate($import_page);
// Add Last page
$mpdf->AddPageByArray(array(
'orientation' => 'P',
'ohvalue' => 1,
'ehvalue' => -1,
'ofvalue' => -1,
'efvalue' => -1,
'newformat' => 'Letter'
));
}
$mpdf->WriteHTML($html);
$mpdf->Output($output_file, 'D');
exit;
Run Code Online (Sandbox Code Playgroud)
Vac*_*aci 10
我像这样合并 pdf - {所有文件中的所有页面}:
$this = 扩展 mPDF 类的类...
function mergePDFFiles(Array $filenames, $outFile)
{
if ($filenames) {
$filesTotal = sizeof($filenames);
$fileNumber = 1;
$this->SetImportUse(); // this line comment out if method doesnt exist
if (!file_exists($outFile)) {
$handle = fopen($outFile, 'w');
fclose($handle);
}
foreach ($filenames as $fileName) {
if (file_exists($fileName)) {
$pagesInFile = $this->SetSourceFile($fileName);
for ($i = 1; $i <= $pagesInFile; $i++) {
$tplId = $this->ImportPage($i); // in mPdf v8 should be 'importPage($i)'
$this->UseTemplate($tplId);
if (($fileNumber < $filesTotal) || ($i != $pagesInFile)) {
$this->WriteHTML('<pagebreak />');
}
}
}
$fileNumber++;
}
$this->Output($outFile);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码适用于带有 php 7.4 的 mpdf 8.0.7。
Mfiles = array();
//Multiple pdf store in Mfiles array with full path.
array_push($Mfiles,'/assets/'.$pdfname.'.pdf');
$Mpath = 'Give file path with have you need to merge all pdf';
// after loop we start this code
if($Mfiles)
{
$filesTotal = sizeof($Mfiles);
$fileNumber = 1;
if (!file_exists($Mpath))
{
$handle = fopen($Mpath, 'w');
fclose($handle);
}
foreach ($Mfiles as $fileName)
{
if (file_exists($fileName))
{
$pagesInFile = $pdf->SetSourceFile($fileName);
for ($i = 1; $i <= $pagesInFile; $i++)
{
$tplId = $pdf->importPage($i);
$pdf->UseTemplate($tplId);
if (($fileNumber < $filesTotal) || ($i != $pagesInFile))
{
$pdf->WriteHTML('<pagebreak />');
}
}
}
$fileNumber++;
}
$pdf->Output($Mpath);
}
Run Code Online (Sandbox Code Playgroud)