2012-08-29 4 views
4

J'utilise le code suivant pour ajouter une nouvelle page à mon document PDF existant et l'enregistrer.FPDF/FPDI addPage() Orientation

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

Il fonctionne très bien si j'ai un document qui est A4, Page 1: portrait, Page 2: portrait, Page 3: portrait, etc.

Il fonctionne aussi si j'ajoute un paysage A4 page . Cependant, après avoir ajouté une page de paysage et essayé d'ajouter un portrait, le paysage est déplacé vers un portrait et tout le formatage du document est rompu.

Je suppose que cela doit faire quelque chose avec addPage() à l'intérieur de la boucle. Pourquoi ne tourne-t-il pas de façon appropriée en appliquant -> useTemplate?

Répondre

11

J'ai supervisé qu'il y avait une fonction appelée -> getTemplateSize(). Voici un extrait de travail:

$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

BTW, si vous ne pouvez pas garantir que tous vos documents seront A4 (ce n'est pas votre problème, mais il était mon problème qui m'a conduit à ce Q), vous pouvez utiliser également la taille de votre modèle pour définir la taille de pages de votre fichier généré, en passant les tailles comme un tableau dans la deuxième arg:

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

Peut-être que cela aide l'un ou l'autre, si vous définissez l'orientation den et cela ne fonctionnera pas en génération pdf. J'ai changé la largeur et la hauteur en mode paysage sur AddPage(). Probablement cela devrait être fait automatiquement, mais dans mon cas en combinaison avec PDFmerger, une classe wrapper pour fpdf/fpdi, ce n'est pas le cas.

$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); 
}