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