Problema FPDF con pagina dinamica PHP

xone

Utente Attivo
4 Apr 2014
179
13
18
Salento
www.seo-expert.it
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.
 

marino51

Utente Attivo
28 Feb 2013
2.599
132
63
Lombardia
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: