1

Bonjour,

Tout dabord, je tiens à vous féciliter pour cette librairie php.

Dans le cadre d'un projet, je dois générer un document PDF contenant en prmeière ou deuxieme page un sommaire avec la page de chaque partie reportée dans ce sommaire.

La difficulté est que le contenu est complètement aléatoire.

J'ai tenté de faire un mix entre html2pdf et fpdf, mais les fonction de fpdf ne semble pas accessible (même depuis $html2pdf->pdf->fonctionExistanteSousFpdf(param) )

Savez - vous comment je peux résoudre mon problème ?

Merci d'avance

2

normalement, toutes les méthodes de fpdf sont accessibles depuis $html2pdf->pdf->...

si elle n'est pas accessible, c'est qu'elle ne fait pas parti de FPDF smile
Ancien pseudo : lolo

3

Merci pour cette réponse rapide.

Au temps pour moi, la fonction que je tentai d'utiliser ne faisait effectivement pas partit de fpdf roll

Avez - vous une fonction permettant la génération de sommaire ?

J'imagine bien que le sommaire est généré en fin de génération de document, il faudrait donc qu'une fois le sommaire généré je place la page en position X du document.

Je poursuit mes recherches et posterait certainement ici ce que j'ai pu trouvé à ce sujet.

4

il y a déjà une fonction permettant de générer un sommaire, cf l'exemple About.

par contre, pour ensuite le déplacer, il faudrait chercher dans les scripts du site de FPDF.
Ancien pseudo : lolo

5

Voici le code à insérer dans mypdf.class.php
var $_numbering=false;
var $_numberingFooter=false;
var $_numPageNum=1;

function AddPage($orientation='') {
parent::AddPage($orientation);
if($this->_numbering)
$this->_numPageNum++;
}

function startPageNums() {
$this->_numbering=true;
$this->_numberingFooter=true;
}
private function log($message){
$timeOffset = microtime(true) - $_SERVER['REQUEST_TIME'];
$dt = date('c') . " " . substr($timeOffset,0,7);
error_log("$dt " . $message . "\n",3,"./logFPDF.txt");
}
function stopPageNums() {
$this->_numbering=false;
}

function numPageNo() {
return $this->_numPageNum;
}

function TOC_Entry($txt, $level=0) {
$this->_toc[]=array('t'=>$txt, 'l'=>$level, 'p'=>$this->numPageNo());
}

function insertTOC( $location=1,
$labelSize=20,
$entrySize=10,
$tocfont='Times',
$label='Table of Contents'
) {
//make toc at end
$this->stopPageNums();
$this->AddPage();
$tocstart=$this->page;

$this->SetFont($tocfont, 'B', $labelSize);
$this->Cell(0, 5, $label, 0, 1, 'C');
$this->Ln(10);

foreach($this->_toc as $t) {

//Offset
$level=$t['l'];
if($level>0)
$this->Cell($level*8);
$weight='';
if($level==0)
$weight='B';
$str=$t['t'];
$this->SetFont($tocfont, $weight, $entrySize);
$strsize=$this->GetStringWidth($str);
$this->Cell($strsize+2, $this->FontSize+2, $str);

//Filling dots
$this->SetFont($tocfont, '', $entrySize);
$PageCellSize=$this->GetStringWidth($t['p'])+2;
$w=$this->w-$this->lMargin-$this->rMargin-$PageCellSize-($level*8)-($strsize+2);
$this-> log("w : ".$w);
$nb=$w/$this->GetStringWidth('.');
$dots=str_repeat('.', $nb);
$this->Cell($w, $this->FontSize+2, $dots, 0, 0, 'R');

//Page number
$this->Cell($PageCellSize, $this->FontSize+2, $t['p'], 0, 1, 'R');
}

//grab it and move to selected location
$n=$this->page;
$n_toc = $n - $tocstart + 1;
$this-> log("n_toc : ".$n_toc);
$this-> log("tocstart : ".$tocstart);
$this-> log("location : ".$location);
$last = array();

//store toc pages
for($i = $tocstart;$i <= $n;$i++)
$last[]=$this->pages[$i];

//move pages
for($i=$tocstart - 1;$i>$location-1;$i--)
$this->pages[$i+$n_toc]=$this->pages[$i];

//Put toc pages at insert point
for($i = 0;$i < $n_toc;$i++)
$this->pages[$location + $i]=$last[$i]; }


Dans le fichier de génération de pdf :


$html2pdf = new HTML2PDF('P','A4', 'fr', 3);
$html2pdf->pdf->SetDisplayMode('fullpage');

$html2pdf->pdf->startPageNums();

//$html2pdf->CreateIndex('Sommaire', 20, 15, true, false);
//$pdf->AliasNbPages();
//$pdf->SetAutoPageBreak();
$i=1;
// pour chaque page crée : {
ob_start();
echo '<page pageset="old"><page_header>blbla</page_header>
<page_footer>bloublou</page_footer>' ;
echo "contenu de ma page" ;
$html2pdf->pdf->TOC_Entry("Ma page", 1);

echo "</page>";
$content = ob_get_clean();
$html2pdf->WriteHTML($content);

//$i++;}

$html2pdf->pdf->stopPageNums();
//$html2pdf->setNewPage();
$html2pdf->pdf->AddPage();
$html2pdf->pdf->insertTOC(1);
$html2pdf->Output("test.pdf");


Par contre, j'ai un soucis, le backbottom ne semble pas fonctionner, j'ai utilisé <page backtop="45px" backbottom="65px" backleft="5px" backright="5px" style="font-size: 12pt">, le contenu dépasse sur le footer. Avez - vous une idée ?

6

Ok après une recherche sur google, je suis tombé sur ceci topics/126743-v326-probleme-avec-backbottom.

D'ailleurs à moins d'etre aveugle, je n'ai pas trouvé de fonction de recherche sur votre forum.

En tout cas jolie boulot pour la librairie !!

7

Afin de compléter ce sujet sur la génération de sommaire, j'aurai voulu savoir comment faire pour insérer une image sur chaque titre du sommaire ?

Si j'utilise WriteHTML ça me génère un PDF un eu bordelique ...

Encore merci !

8

La fonction recherche est tout en haut à droite, troisième icône en partant de la droite (la loupe ^^). Mais elle est assez restreinte (yN est un très gros forum, et l'indexation efficace des contenus n'est pas facile).
avatar

9

les fonction de sommaire automatique n'utilisent pas html2pdf, et ne peuvent pas avoir autre chose que du texte.

par contre, tu rajoutes là du code qui est déjà poru la plus part présent pour généré des tables des matières automatique. regarde bien l'exemple About.php, il montre comment rajouter des points pour une TOC, et l'affichage de celle-ci.
Ancien pseudo : lolo