需求:
有一个pdf文件, 里面是a5 页面大小输出的, 现在想要将两张a5 打印到一张a4纸张上,
也就是想把这个pdf文件 每两页a5页面 合并为一张a4 页面.
解决:
a4纸的大小为 210 * 297mm, a5大小为210 * (297 /2)
.2pdf是合并之前的临时文件, 当合并成功后, 输出新的文件, 并删除 .2pdf临时文件
private function convertPdfA5ToA4(string $file_path, string $file_name): void
{
$pdf = new Fpdi();
$pdf->SetPrintHeader(false);
$pdf->setPrintFooter(false);
try {
$page_count = $pdf->setSourceFile($file_path . $file_name . '2.pdf');
for ($pageNo = 1; $pageNo <= $page_count; $pageNo++) {
//单数页
if ($pageNo % 2 != 0) {
$templateId = $pdf->importPage($pageNo);
$size = $pdf->getTemplateSize($templateId, 210, 297);
// 添加一个竖向的a4页面
$pdf->AddPage('P', 'A4');
$pdf->useTemplate($templateId);
$pdf->SetFont('cid0cs', '', 9);
$pdf->SetXY(5, 5);
} else { // 偶数页
$templateId = $pdf->importPage($pageNo);
$size = $pdf->getTemplateSize($templateId, 210, 153);
$pdf->useTemplate($templateId, 0, 153);
$pdf->SetFont('cid0cs', '', 9);
$pdf->SetXY(5, 5);
}
}
// 输出到浏览器
$pdf->Output($file_name . '.pdf', 'D');
} catch (Exception $e) {
throw new TcctException('打印异常, 请稍后再试~');
}
if (file_exists($file_path . $file_name . '2.pdf')) {
$bool = unlink($file_path . $file_name . '2.pdf');
}
return;
}