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() 方向的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法让 FPDF/FPDI 或 Zend_Pdf 支持解析大于 1.4 的 PDF?

PHP使用Fpdi和fpdf 合同电子合同

PHP使用Fpdi和fpdf 合同电子合同

PHP使用Fpdi和fpdf 合同电子合同

PHP使用FPDF pdf添加水印中文乱码问题

FPDF 错误:此文档 (testcopy.pdf) 可能使用了 FPDI 附带的免费解析器不支持的压缩技术