php批量打印发票三(php用FPDF合并所有图片为PDF文档)
三. php用FPDF合并所有图片为PDF文档
过程
1.下载FPDF库, F意为free,免费的意思. 但它调用fpdi时, 有区分免费和商业版本. 所以起初想用FPDF和FPDI库, 进行PDF合并, 结果发现发票的PDF是修改过了,加了签章,免费版的合并不了,只能用商业版, 所以放弃了, 如果是普通PDF, 还是很方便快捷
方法1: 把图片合并成1个PDF文档
将前生成图片后,所有的图片名+路径以数组方式传入该函数, 循环添加PDF页面, 如果遇到横向图片(带_p),新增页时就加上参数: p, 还有当前页画布的高宽值做交换
//开始合并生成PDF
if(!empty($backPath))
{
include_once 'myProject/functions/fpdf/fpdf.php';
$pdf=new FPDF('L','mm',['405.7','268.1']); //定义一个PDF文档
foreach ($backPath as $item)
{
if(is_file($item))
{
if(strpos($item, '_p.png')) //如果是横向,就要改变写入图片的宽高
{
$pdf->AddPage('p');
$pdf->Image($item,0,0,268.1,405.7);
}
else
{
$pdf->AddPage();
$pdf->Image($item,0,0,0,0);
}
}
else
{
echo ("<script>alert('图片文件不存在');window.close();</script>");
exit;
}
}
$pdf->Output(); //输出PDF文件
}
方法2: 把多个PDF合并成1个PDF文档
前题: PDF没修改过
引入FPDF和FPDI, 代码如下, 这个从官方文档看, 示例代码很多. 复制来就能用
//PDF文档合并,功能正常, 不能合并编辑过的PDF,比如有签名的,比如盖章的发票.
use setasign\Fpdi\Fpdi;
require_once('fpdf/fpdf.php');
require_once('fpdi/src/autoload.php');
class ConcatPdf extends Fpdi
{
public $files = array();
public function setFiles($files)
{
$this->files = $files;
}
public function concat()
{
foreach($this->files AS $file) {
$pageCount = $this->setSourceFile($file);
for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
$pageId = $this->ImportPage($pageNo);
$s = $this->getTemplatesize($pageId);
$this->AddPage($s['orientation'], $s);
$this->useImportedPage($pageId);
}
}
}
}
$pdf = new ConcatPdf();
$pdf->setFiles(array('5.pdf', '6.pdf'));
$pdf->concat();
$pdf->Output('I', 'concat.pdf');
小记:
如果10多张发票一起处理, 可能会超过1分钟,这时会引起WEB服务响应超时.
环境是phpstudy
经测试,Apache默认是40秒, nginx为60秒.
修改apache中的配制后,不生效找不到原因. 就换nginx了. Nginx需要修改配制如下:
把所有timeout都改成了600, 意为10分钟. 其实在小皮面板的配制里也可以改, 但改了还是不够的.
找到send_timeout项, 在下面接着加上如下三项:
fastcgi_connect_timeout 600;
fastcgi_send_timeout 600;
fastcgi_read_timeout 600;
这样就可以正常运行了, 最好在本地做测试. 由于我用了Nginx作了反向代理, 用的域名访问, 还是超时.
然后在代理服务器上做了如下设置,即可解决.
#我的内网代理
server { listen 80; server_name abc.abc.com; location / { proxy_pass http://192.168.0.7; proxy_read_timeout 600; #1 增加如下两项 proxy_send_timeout 600; #2 root html; index index.html index.htm; } }


浙公网安备 33010602011771号