PHP 合并 PDF

Sheeraz Gul 2024年2月15日
  1. 在 PHP 中使用 Ghostscript 合并多个 PDF 文件
  2. 在 PHP 中使用 FPDFFPDI 库合并多个 PDF
PHP 合并 PDF

PHP 有几种不同的方法来合并多个 PDF。

长期以来,Ghostscript 是通过 PHP 执行 PDF 操作最常用的方式。

FPDI 也是一个 PHP 库,在 PHP 中提供 PDF 操作。

可以通过两种方式合并多个 PDF。本教程演示如何在 PHP 上安装和运行这些库以合并 PDF 文件。

在 PHP 中使用 Ghostscript 合并多个 PDF 文件

Ghostscript 是一个没有内置在 Windows 上的命令行库。首先,我们需要从链接 https://ghostscript.com/releases/gsdnld.html 安装 Ghostscript

根据你的操作系统版本下载 Ghostscript 文件。该文件将是这样的:

gs9550w64.exe

运行下载的文件并安装它。安装完成后,转到安装目录的 bin 文件夹并将文件 gswin64c.exe 重命名为 gs.exe 以使用 gs 作为命令。

Ghostscript 的安装完成。下一步是使用 PHP 将 pdf 文件与 Ghostscript 合并。

<?php
$files= array("one.pdf","two.pdf","three.pdf");
$pdfdir = "C:/Apache24/htdocs/samplepdfs/";
//we gave absolute path because sometimes the libraries can't detect the path. Please use your path here.
$output = $pdfdir."NewMergedPDF.pdf";
$cmd = "gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=".$output." -dBATCH ";
//setting enviroment variable path
putenv('PATH=C:\Program Files\gs\gs9.55.0\bin');

foreach($files as $file) {
    //Setting path for each file
    $pdf= $pdfdir.$file;
	//adding each file to the command
    $cmd = $cmd.$pdf." ";
}
// The final command will be the comment below, if you run this command directly in cmd, the output will be similar
//gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=C:/Apache24/htdocs/samplepdfs/NewMergedPDF.pdf -dBATCH C:/Apache24/htdocs/samplepdfs/one.pdf C:/Apache24/htdocs/samplepdfs/two.pdf C:/Apache24/htdocs/samplepdfs/three.pdf
exec($cmd);
?>

上面的代码将三个 PDF 文件作为输入,并将它们合并为一个 PDF。

输出:

使用 Ghostcript 合并多个 PDF

在 PHP 中使用 FPDFFPDI 库合并多个 PDF

首先,我们需要从下面的链接下载 FPDFFPDI 库。

下载 zip 或任何其他文件后,将它们从运行你的 test.php 文件中解压缩到文件夹中。

提取文件后,运行以下示例:

<?php
//import fpdi and fpdf files
use setasign\Fpdi\Fpdi;
require_once('fpdf/fpdf.php');
require_once('fpdi/src/autoload.php');

//create your class to merge pdfs
class MergePdf extends Fpdi
{
    public $pdffiles = array();

    public function setFiles($pdffiles)
    {
        $this->pdffiles = $pdffiles;
    }
    //function to merge pdf files using fpdf and fpdi.
    public function merge()
    {
        foreach($this->pdffiles AS $file) {
            $pdfCount = $this->setSourceFile($file);
            for ($pdfNo = 1; $pdfNo <= $pdfCount; $pdfNo++) {
                $pdfId = $this->ImportPage($pdfNo);
                $temp = $this->getTemplatesize($pdfId);
                $this->AddPage($temp['orientation'], $temp);
                $this->useImportedPage($pdfId);
            }
        }
    }
}

$Outputpdf = new MergePdf();
//we gave absolute path because sometimes the libraries can't detect the path. Please use your path here.
$Outputpdf->setFiles(array('C:\Apache24\htdocs\samplepdfs\one.pdf', 'C:\Apache24\htdocs\samplepdfs\two.pdf', 'C:\Apache24\htdocs\samplepdfs\three.pdf'));
$Outputpdf->merge();

//I: The output pdf will run on the browser
//D: The output will download a merged pdf file
//F: The output will save the file to a particular path.
//We select the default I to run the output on the browser.
$Outputpdf->Output('I', 'Merged PDF.pdf');
?>

上面的代码将导入 fpdifpdf 库并合并 pdf 文件。输出将是在浏览器上运行的合并 pdf。

输出:

使用 FPDF 和 FPDI 合并多个 PDF

其他库也可以对 PDF 执行类似的操作,但 GhostscriptFpdi 是使用最广泛的两个。

作者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

相关文章 - PHP PDF