You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现多页A6尺寸PDF拼版合并为A4PDF的方法及示例代码

A6尺寸PDF拼版为A4尺寸的实现方案

无需Composer依赖的方案

优先选择调用系统原生Ghostscript工具实现,不需要安装任何PHP依赖包,处理性能远高于PHP原生库,适合大体积PDF、高并发场景。绝大多数Linux服务器环境可直接通过包管理器安装Ghostscript,Windows环境仅需将Ghostscript二进制文件加入系统路径即可调用。

可选用的Composer依赖包

如果服务器权限受限无法安装系统工具,可选用以下开源MIT协议的Composer包实现,无商业使用限制:

  • setasign/fpdi:生态最成熟的PDF导入处理库,支持读取任意现有PDF页面,按自定义坐标摆放到新PDF页面,是PHP场景下PDF拼版的首选
  • setasign/fpdf:轻量级PDF生成库,和FPDI搭配使用即可完成完整拼版逻辑,整体包体积不足1MB,加载速度快
  • tecnickcom/tcpdf:功能全面的老牌PDF处理库,自带页面尺寸适配、内容排版能力,不需要额外搭配其他库即可完成拼版

可参考实现代码

无Composer依赖(Ghostscript实现)

<?php
// 原A6 PDF文件路径
$sourcePdfPath = __DIR__ . '/a6_source.pdf';
// 拼版后输出A4 PDF路径
$outputPdfPath = __DIR__ . '/a4_merged.pdf';

// 读取原PDF总页数
$totalPage = (int)shell_exec(
    "gs -q -dNODISPLAY -c \"($sourcePdfPath) (r) file runpdfbegin pdfpagecount = quit\""
);

// 直接调用Ghostscript执行2*2排版拼版
$command = <<<GS_CMD
gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER \
-sPAPERSIZE=a4 \
-dFIXEDMEDIA \
-sOutputFile={$outputPdfPath} \
-c "
<< /EndPage {
  2 eq { pop false }
  {
    4 mod 0 eq { /y 0 def /x 0 def } if
    4 mod 1 eq { /y 421 def /x 0 def } if
    4 mod 2 eq { /y 0 def /x 298 def } if
    4 mod 3 eq { /y 421 def /x 298 def } if
    0 0 moveto
    /curPage save def
    x y translate
    0.707 0.707 scale
    curPage restore
    showpage
    true
  } ifelse
} bind >> setpagedevice
" -f {$sourcePdfPath}
GS_CMD;

shell_exec($command);
echo "拼版完成,共生成".ceil($totalPage/4)."页A4文件,保存路径:{$outputPdfPath}";
?>

Composer依赖实现(FPDI+FPDF)

先执行安装命令:composer require setasign/fpdi setasign/fpdf
对应代码:

<?php
require __DIR__ . '/vendor/autoload.php';

use setasign\Fpdi\Fpdi;

// 初始化A4尺寸PDF实例,单位毫米,关闭自动分页
$pdf = new Fpdi('P', 'mm', 'A4');
$pdf->SetAutoPageBreak(false);
$sourcePdfPath = __DIR__ . '/a6_source.pdf';
$totalPage = $pdf->setSourceFile($sourcePdfPath);

// A4页面2*2排版的四个A6区块坐标,A6标准尺寸为105mm*148mm
$positions = [
    ['x' => 0, 'y' => 0],
    ['x' => 0, 'y' => 148],
    ['x' => 105, 'y' => 0],
    ['x' => 105, 'y' => 148]
];

for ($pageNo = 1; $pageNo <= $totalPage; $pageNo++) {
    // 每4个A6页新建1个A4页
    if (($pageNo - 1) % 4 === 0) {
        $pdf->AddPage();
    }
    // 导入当前A6页面模板
    $pageTpl = $pdf->importPage($pageNo);
    $currentPos = $positions[($pageNo - 1) % 4];
    // 将A6页面放到对应位置,按原尺寸渲染不需要缩放
    $pdf->useTemplate($pageTpl, $currentPos['x'], $currentPos['y'], 105, 148);
}

$pdf->Output(__DIR__ . '/a4_merged.pdf', 'F');
echo "拼版完成,共生成".ceil($totalPage/4)."页A4文件";
?>

说明:以上代码完全匹配需求逻辑,例如7页A6内容会自动生成2页A4,第一页排版前4页A6内容,第二页排版剩余3页内容,空余位置自动留空。如果原PDF存在页面旋转、出血位等特殊设置,对应调整坐标参数即可。

内容的提问来源于stack exchange,提问作者bot studio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:21:22