Stampare più pagine con fpdf

kyrajack

Nuovo Utente
19 Mar 2014
3
0
0
Salve, sono nuovo del forum e premetto che non sono un genio di php quindi probabilmente per risolvere il mio problema ci sarà qualche modo più semplice di quello che sto cercando di usare. Vi espongo il dilemma:

dovrei stampare un numero n di pagine, nello stesso documento pdf, numerate con un codice sequenziale. Il numero di pagine da stampare viene scelto in un form che si trova su un'altra pagina, il problema che ho con il codice che ho scritto è che mi crea una sola pagina. Vi posto il codice così si capisce meglio:

pagina form:

HTML:
<form action="stampa.php" method="post" id="stampe" target="_blank">
Numero stampe:<input type="text" name="numero" id="numero"><br>
<input type="submit" value="Stampa">
</form>

pagina di stampa fpdf:

PHP:
<?php
require_once('script/fpdf/fpdf.php');
require_once('script/fpdi/fpdi.php');
$numero = $_POST['numero'];


for ($stampe=1 ; $stampe <= $numero ; $stampe++){

$var=@fopen("code.txt",'r');
$code=@fread($var,filesize("code.txt"));
@fclose($var);
if ($code==null){
$code=1;
}
else{
$code=$code+1;
}
$var=@fopen("code.txt",'w');
@fwrite($var,$code);
@fclose($var);

// initiate FPDI
$pdf = new FPDI();
// add a page
$pdf->AddPage('L');
// set the source file
$pdf->setSourceFile("ddt.pdf");
// import page 1
$tplIdx = $pdf->importPage(1);
// use the imported page and place it at point 10,10 with a width of 500 mm
$pdf->useTemplate($tplIdx, 0, 1, 300);

// now write some text above the imported page
$pdf->SetFont('Helvetica');
$pdf->SetFontSize(18);
$pdf->SetTextColor(196, 91, 106);
$pdf->SetXY(65, 43);
$pdf->Write(0, 'A'.$code);
$pdf->Output('A' . $code,'I');
$doc = $pdf->Output('','I');

}
?>



Il ciclo for preso da solo funziona perchè mi crea il numero di codici sequenziali che decido nell'input del form, il problema sorge quando aggiungo la libreria fpdf perchè viene stampata una sola pagina con un solo codice.

C'è un modo per risolvere questo problema?
Qualcuno sa darmi una mano?
Grazie in anticipo
 
Ultima modifica di un moderatore:
ciao,

ti suggerisco di spostare

$pdf = new FPDI();

prima di

for ($stampe=1 ; $stampe <= $numero ; $stampe++){

ma non sono certo, se non dovesse funzionare prova a postare una copia
di ddt.pdf se non contiene dati riservati.

ciao
Marino
 
scusa, anche l'output deve stare fuori dal ciclo for, dopo la sua chiusura

PHP:
  $pdf->Output('A' . $code,'I'); 
  $doc = $pdf->Output('','I');

ma forse altre cose ... per come è impostato il tutto, stampa solo 1 pagina x pdf

leggi 1 pagina, poi aggiungi testo
PHP:
// now write some text above the imported page 
$pdf->SetFont('Helvetica'); 
$pdf->SetFontSize(18); 
$pdf->SetTextColor(196, 91, 106); 
$pdf->SetXY(65, 43);

aggiungi il testo
PHP:
$pdf->Write(0, 'A'.$code);

chiudi il pdf
PHP:
$pdf->Output('A' . $code,'I'); 
$doc = $pdf->Output('','I');

per riaprirne un altro al prossimo ciclo del for
 
Ultima modifica:
oppure, leggo dal tuo script che importi solo la pagina 1

$tplIdx = $pdf->importPage(1);

mentre se il pdf contiene più pagine dovresti modificare

$NumeroPagine = $pdf->setSourceFile("ddt.pdf");

ed inserire un ciclo for
ciao
Marino
 
da ultimo, guarda il risultato nel pdf allegato, se va bene, il codice è il seguente
ciao
Marino

ps, ovviamente il file di partenza conteneva 2 pagine uguali ....

PHP:
<?php 

# http://localhost/test_site/php/test/fpdi.php

require("fpdf/fpdf.php");
require("fpdi/fpdi.php");

$numero = 1; 


for ($stampe=1 ; $stampe <= $numero ; $stampe++){ 

  $code = counter();

  $pdf = new FPDI(); 
//$pdf->AddPage('L');
  $NumeroPagine = $pdf->setSourceFile("ddt.pdf");
  print "numero di pagine : ".$NumeroPagine."<br />";
 
  for($i = 1; $i <= $NumeroPagine; $i++){
    print "pagina : ".$i."  code : ".$code."<br />";

    $tplIdx = $pdf->importPage($i); 
    $s = $pdf->getTemplatesize($tplIdx);
//  $pdf->useTemplate($tplIdx, 0, 1, 300); 
    $pdf->AddPage($s['w'] > $s['h'] ? 'L' : 'P', array($s['w'], $s['h']));
    $pdf->useTemplate($tplIdx);

    $pdf->SetFont('Helvetica');		// now write some text above the imported page
    $pdf->SetFontSize(18); 
    $pdf->SetTextColor(196, 91, 106); 
    $pdf->SetXY(65, 43); 
    $pdf->Write(0, 'A'.$code); 
  } 
  $pdf->Output('A'.$code.".pdf",'F'); 
} 
print "DONE !<br />";

function counter(){
  $var=@fopen("code.txt",'r'); 
  $code=@fread($var,filesize("code.txt")); 
  @fclose($var); 

  if ($code==null) $code=1; 
  else             $code=$code+1; 

  $var=@fopen("code.txt",'w'); 
  @fwrite($var,$code); 
  @fclose($var); 

  return $code;
} 
?>
 

Allegati

Ultima modifica:
Ciao, grazie mille per l'aiuto, alla fine sono riuscito a risolvere spostando prima del ciclo for

// initiate FPDI
$pdf = new FPDI();
e
// set the source file
$pdf->setSourceFile("ddt.pdf");

e spostando l'output

$pdf->Output('A' . $code,'I');
$doc = $pdf->Output('','I');

dopo il ciclo come mi hai suggerito
grazie
 

Discussioni simili