FPDF / FPDI addPage() 方向
Posted
技术标签:
【中文标题】FPDF / FPDI addPage() 方向【英文标题】:FPDF / FPDI addPage() Orientation 【发布时间】:2012-08-24 12:37:51 【问题描述】:我正在使用以下代码将新页面添加到现有 PDF 文档并保存。
require('addons/fpdf.php');
require('addons/fpdi.php');
$pdf = new FPDI();
$pagecount = $pdf->setSourceFile($orgpdfpath);
for($i = 1; $i <= $pagecount; $i++)
$pdf->addPage();
$tplidx = $pdf->importPage($i);
$pdf->useTemplate($tplidx);
$pdf->addPage($pdforientation);
$pdf->Image($imgpath,$pdfxaxis,$pdfyaxis,$pdfwith,$pdfheight);
$pdf->Output($orgpdfpath,'F');
如果我的文档是 A4、第 1 页:纵向、第 2 页:纵向、第 3 页:纵向等,则效果很好。
如果我添加横向 A4 页面,它也可以工作。但是,在我添加了横向页面并尝试添加纵向后,横向又恢复为纵向,文档的整个格式都中断了。
我怀疑这与循环内的 addPage() 有关系。为什么在应用->useTemplate时不能正常旋转?
【问题讨论】:
【参考方案1】:我监督有一个名为 ->getTemplateSize() 的函数。 这是一个有效的 sn-p:
$pdf = new FPDI();
$pagecount = $pdf->setSourceFile($orgpdfpath);
for($i = 1; $i <= $pagecount; $i++)
$tplidx = $pdf->importPage($i);
$specs = $pdf->getTemplateSize($tplidx);
$pdf->addPage($specs['h'] > $specs['w'] ? 'P' : 'L');
$pdf->useTemplate($tplidx);
$pdf->addPage($pdforientation);
$pdf->Image($imgpath,$pdfxaxis,$pdfyaxis,$pdfwith,$pdfheight);
$pdf->Output($orgpdfpath,'F');
【讨论】:
【参考方案2】:顺便说一句,如果您不能保证所有文档都是 A4(这不是您的问题,但这是我的问题导致我出现此问题),您还可以使用模板的大小来设置生成文件页面的大小,通过在第二个参数中将大小作为数组传递:
$pdf->AddPage(
( $size['w'] > $size['h'] ) ? 'L' : 'P',
[ $size['w'], $size['h'] ]
);
【讨论】:
【参考方案3】:如果您定义书房方向并且它不适用于pdf生成,这可能会有所帮助。我在 AddPage() 上更改了横向模式下的宽度和高度。可能这应该自动完成,但在我的情况下,与 PDFmerger(fpdf/fpdi 的包装类)结合使用,它不会。
$fpdi = new FPDI;
$count = $fpdi->setSourceFile($filename);
for($i=1; $i<=$count; $i++)
$template = $fpdi->importPage($i);
$size = $fpdi->getTemplateSize($template);
$orientation = ($size['h'] > $size['w']) ? 'P' : 'L';
if ($orientation == "P")
$fpdi->AddPage($orientation, array($size['w'], $size['h']));
else
$fpdi->AddPage($orientation, array($size['h'], $size['w']));
$fpdi->useTemplate($template);
【讨论】:
以上是关于FPDF / FPDI addPage() 方向的主要内容,如果未能解决你的问题,请参考以下文章