2012-08-29 86 views
4

我正在使用以下代码将新页面添加到现有的PDF文档并保存。FPDF/FPDI addPage()方向

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时不能正确旋转?

回答

11

我监督了一个叫做 - > getTemplateSize()的函数。 这里有一个工作片断:

$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'); 
0

顺便说一句,如果你不能保证所有的文件将是A4(这不是你的问题,但它是我的问题,使我这个Q),你可以还使用模板的大小来设置生成的文件页面的大小,通过将大小作为数组中的第二ARG:

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

也许这可以帮助一个或另一个,如果你定义书房方向和它不会在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); 
}