2012-08-29 121 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); 
}