Problema FPDF con pagina dinamica PHP

  • Creatore Discussione Creatore Discussione xone
  • Data di inizio Data di inizio

xone

Utente Attivo
4 Apr 2014
181
14
18
Salento
Salve,

è sorto un problema con la lib fpdf per creare delle pagine pdf partendo da tabelle mysql.
Il problema è che se la pagina viene richiamata dinamicamente tramite index.php?page=stampa si riceve errore:

FPDF error:
Some data has already been output, can't send PDF file

se invece la pagina stampa.php viene richiamata direttamente il tutto funziona.
Ho anche provato ad inserire ob_clean(); prima della chiusura ma non si risolve.
 
di solito succede quando viene generato un output html nella pagina di fpdf,
potrebbe essere anche un banale spazio che precede "<?php"
oppure un'echo messa per "debug"
fpdf deve essere eseguito in una pagina "pulita"

giusto come suggerimento,
ho "esteso" la classe fpdf con Header, BodyTable e Footer,
così da gestire tutte le tipologie di stampe "semplici" e che eseguo con codice tipo,
PHP:
<?php
$swN = "RTAB";

require_once '../includes/Config_Scr.php';
require_once NS('Iconfigdb');
require_once NS('Iclasspdf');

$settings['title']    = '****** - Lista delle tabelle di riferimento';
$settings['column']   = array('tab_cod','tab_ele','tab_descr_1');
$settings['header']   = array('tabella','elemento','referenza');
$settings['colwidth'] = array(20,20,200);
$settings['align']    = array('C','C','L');
$settings['round']    = array(null,null,null);
$settings['hide']     = array(1,1,0);

$sql = "SELECT * FROM tabelle ORDER BY tab_cod, tab_ele, tab_descr_1";
$sth = $db->query( $sql );

$pdf = new PDF('L', 'mm', 'A4');

$pdf->SetAuthor("******");
$pdf->SetCreator("****** project");
$pdf->SetSubject("tabelle");

$pdf->SetMargins(10,10,10);
$pdf->SetAutoPageBreak(true, 15);
$pdf->SetLineWidth(.4);
$pdf->AliasNbPages();
$pdf->SetDrawColor(0,153,255);

$pdf->AddPage();
$pdf->BodyTable();

$_SESSION['OPreportname'] = ReportName("tabelle");
require_once NS('Iunsetvarsrep');
?>
la select può essere "complessa", ovvero lavorare su più tabelle del db, l'importante è poter discriminare le colonne selezionate
l'output fpdf lo indirizzo su file che poi visualizzo a video con
PHP:
<?php
session_start();

$OPreportfolder = $_SESSION['OPreportfolder'];
$OPreportname   = $_SESSION['OPreportname'];
$OPpdffile      = $_SESSION['OPreportfolder']."\\".$_SESSION['OPreportname'];

if(file_exists($OPpdffile))
{
  header('Content-type: application/pdf');
  header('Content-Disposition: inline; filename="' . $OPreportname . '"');
  header('Content-Transfer-Encoding: binary');
  header('Content-Length: ' . filesize($OPpdffile));
  header('Accept-Ranges: bytes');
  readfile($OPpdffile);
}
die;
?>
questa soluzione, permette di creare report "in a minute" modificando $settings e select
Cattura.PNG
 
Ultima modifica:

Discussioni simili