关于php:FPDF / FPDI addPage()方向

FPDF / FPDI addPage() Orientation

我正在使用以下代码将新页面添加到现有的PDF文档中并保存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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时不能正确旋转?


我监督了一个叫做-> getTemplateSize()的函数。
这是一个有效的代码段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$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');

如果您定义书房方向,这可能会对一个或另一个有所帮助,并且不适用于pdf生成。我在横向模式下在AddPage()上更改了宽度和高度。可能应该自动完成此操作,但是在我的情况下,与PDFmerger(fpdf / fpdi的包装器类)结合使用就不会。

1
2
3
4
5
6
7
8
9
10
11
12
13
$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);
}

顺便说一句,如果您不能保证所有文档都为A4(这不是您的问题,但这是我的问题导致我问到这个问题),也可以使用模板的大小来设置通过在第二个arg:

中将大小作为数组传递来生成文件的页面大小

1
2
3
4
$pdf->AddPage(
    ( $size['w'] > $size['h'] ) ? 'L' : 'P',
    [ $size['w'], $size['h'] ]
);