首页 > php > php中如何合并多个pdf并压缩
2021
07-09

php中如何合并多个pdf并压缩

背景


市面上常见的pdf处理软件,大部分都是收费的,经常功能不全,有时我们需要合并多个pdf文件,有时甚至还需要压缩一下大小,我怎么能用PHP做到这一点呢?


解决方案

(一)利用linux命令gs、pdf2ps、ps2pdf等

<?php

$fileArray = array("name1.pdf", "name2.pdf", "name3.pdf", "name4.pdf");

$datadir = "/home/phpmianshi.com/pdf/";
$outputName = $datadir . "merged.pdf";

$cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$outputName ";
//Add each pdf file to the end of the command
foreach ($fileArray as $file) {
    $cmd .= $file . " ";
}
$result = shell_exec($cmd);


通过将PDF转换为Postscript,然后使用

pdf2ps merged.pdf merged.ps

ps2pdf -dPDFSETTINGS=/ebook merged.ps merged-optimized.pdf


参数-dPDFSETTINGS的值定义了生成的PDF中图像的质量。 从低到高质量的选项有:/screen/default/ebook/printer/prepress

请参阅http://milan.kupcevic.net/ghostscript-ps-pdf/ 以供参考。

Postscript文件可能会变得很大,但结果值得。 我从60 MB的PDF转换为140 MB的Postscript文件,但最终得到了1.1 MB的优化PDF。


大家也可以用这个现在压缩的网站

https://www.ilovepdf.com/zh-cn/compress_pdf


(二)需要fpdf和fpdi库,2个都要下载

FPDF:http://www.fpdf.org/en/download.php

GITHUB: https://github.com/Setasign/FPDF

FPDI:https://www.setasign.com/products/fpdi/downloads

参考案例:https://manuals.setasign.com/fpdi-manual/v2/the-fpdi-class/examples/#index-3

<?php

use \setasign\Fpdi\Fpdi;

require_once('/home/phpmianshi/fpdi/fpdf/fpdf.php');
require_once('/home/phpmianshi/fpdi/src/autoload.php');

$fileArray = array("name1.pdf", "name2.pdf", "name3.pdf", "name4.pdf");

$files = array(
    'name1.pdf',
    'name2.pdf',
    'name3.pdf'
);

// initiate FPDI
$pdf = new Fpdi();

// iterate through the files
foreach ($files as $file) {
    // get the page count
    $pageCount = $pdf->setSourceFile($file);
    // iterate through all pages
    for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
        // import a page
        $templateId = $pdf->importPage($pageNo);
        // get the size of the imported page
        $size = $pdf->getTemplateSize($templateId);

        // add a page with the same orientation and size
        $pdf->AddPage($size['orientation'], $size);

        // use the imported page
        $pdf->useTemplate($templateId);

        $pdf->SetFont('Helvetica');
        $pdf->SetXY(5, 5);
        //$pdf->Write(8, 'A simple concatenation demo with FPDI');
    }
}

// Output the new PDF
$pdf->Output("F", 'merged.pdf');

FPDF简介

FPDF 是一个 PHP 类,它允许用纯 PHP 生成 PDF 文件,也就是说,不需要使用PDFlib库。FPDF中的F代表免费:你可以将其用于任何类型的用途,并根据你的需要进行修改。

测量单位、页面格式和页边距的选择
页眉和页脚管理
自动分页
自动换行和文本调整
支持图像(JPEG、PNG和GIF)。
颜色
链接
支持TrueType、Type1和编码
页面压缩


本文》有 0 条评论

留下一个回复