背景
市面上常见的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 条评论