Stampa da PHP

Alex@1983

Utente Attivo
9 Mag 2015
126
2
18
Mumble......Mumble.....

nuovo "problema".....sicuramente semplice da affrontare per i miei "helper" abituali ..... ma assolutamente misterioso per quanto mi riguarda.

questa volta , giusto quasi alla fine del mio progettino , è riuscire stampare direttamente dalla paginetta .php .....con un bel pulsantino STAMPA

mi spiego meglio:

Inserisco dei record nel mio DB :

-ID (autoincrement) DATA |ORA | OPERATORE| RICHIESTA |CATEGORIA |SOTTO CATEGORIA | DESCRIZIONE | NOTE

In un'altra pagina , trmite l'ID ricerco il record che mi interessa, che mi viene riportato nei relativi campi.

IL mio "desiderata" sarebbe quello di riuscire a tirare fuori un output di stampa e tramite il relativo tasto .... stampare su una stampante locale , assolutamente non collegata al server ( che è su altervista ) ma che si trova nel mio ufficio.

So che poi potrò preoccuparmi di impinare il tutto per come deve essere graficamente stampato....ma quello che mi manca è proprio il now-haw per arrivare al lanciare il comando di stampa

Ho visto che ci sono diverse librerie FPDF - HTML2PDF - HTML2FPDF ..... ma onestamente nessuno poi alla fine arriva al dunque , spiegando come ottenere il risultato.......

Chi ha ..... per l'ennessima volta.... di darmi una dritta ????
redface.png
030.gif
sadico.gif
blink.gif
rolleyes.png


Grazie ...sempre!
 
da sempre utilizzo FPDF che mi sembra adatto per creare report semplici ma anche "ben" complessi,

per listati semplici
ho "esteso" la classe FPDF, sviluppando i metodi "Header" e "Footer" in essa presenti ma vuoti
i due metodi gestiscono in maniera automatica l'intestazione ed il piede della pagina

ho inserito anche un mio metodo "BodyTable", che legge il risultato della select e compone la tabella da stampare

sviluppando lo script in questo modo, ho ottenuto una classe capace di listare tabelle generiche ( inteso query anche complesse )
ed al contempo ho semplificato molto lo sviluppo degli script che raccolgono i dati e li inviano alla stampa

questa è la struttura della classe
PHP:
require_once "FPDF/fpdf.php";

class PDF extends FPDF
{
    function BodyTable()
    {
        global $sth, $settings;

        while( $Row = $sth->fetch(PDO::FETCH_ASSOC) )
        {
            for($i=0; $i<$settings['Ncolumn']; $i++)
            {
                $value = nf($Row[$settings['column'][$i]], $settings['round'][$i]);

                .......

                $this->Cell($settings['colwidth'][$i], 6, $value, 'LR', 0, $settings['align'][$i], $fill);
            }
        }
    }


    function Header()
    {
        global $settings;
        .....
    }


    function Footer()
    {
        global $settings;
        .....
    }
}

questo è un esempio di script
PHP:
require_once NS('Iclasspdf');

$settings['title']    = 'Lista delle tabelle di riferimento';     // titolo del listato
$settings['column']   = array('tab_cod','tab_ele','tab_descr_1'); // elenco delle colonne provenienti dal db da stampare
$settings['header']   = array('tabella','elemento','referenza');  // intestazione delle colonne
$settings['colwidth'] = array(20,20,200);                         // larghezza delle colonne
$settings['align']    = array('C','C','L');                       // allineamento delle colonne L - C - R
$settings['round']    = array(null,null,null);                    // eventuale arrotondamento da applicare / formato data
$settings['hide']     = array(1,1,0);                             // colonne da "identare" quando si ripete il codice

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

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

$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');
cambiando i parametri in $settings[] e la select in $sql, un nuovo report è pronto

report più complessi richiedono uno sviluppo maggiore ma con FPDF, come detto, si ottengono buoni risultati
 
giusto per vedere una cosa semplice,
due report nello stesso pdf con dimensioni diverse (anche il numero delle colonne potrebbe essere differente)
ed il relativo script
PHP:
require_once NS('Iclasspdf');

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

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

do_it('a');
do_it('b');

$_SESSION['OPreportname'] = ReportName("DBconsistency");
require_once NS('Iunsetvarsrep');


function do_it($x) {
  global $db, $sth, $pdf, $settings;

  switch ($x) {
    case "a":
      $settings['newtable'] = false;
      $settings['title']    = 'Retrieve hierarchical data from database top-down';
      $settings['column']   = array('distance','GLID','GLCD','GLDesc','ParentGLCD','NodeSequence');
      $settings['header']   = array('distance','GLID','GLCD','GLDesc','ParentGLCD','NodeSequence');
      $settings['colwidth'] = array(20,20,20,70,20,70);
      $settings['align']    = array('C','C','C','L','C','L');
      $settings['round']    = array(null,null,null,null,null,null);
      $settings['hide']     = array(0,0,0,0,0,0);

      $sql = "SELECT * FROM testDB.dbo.GLSubordinates_v1('30') order by NodeSequence";

      $pdf->AddPage();

      break;

    case "b":
      $settings['newtable'] = true;
      $settings['title']    = 'Retrieve hierarchical data from database bottom-up';
      $settings['column']   = array('distance','GLID','GLCD','GLDesc','ParentGLCD','ParentGLDesc');
      $settings['header']   = array('distance','GLID','GLCD','GLDesc','ParentGLCD','ParentGLDesc');
      $settings['colwidth'] = array(30,30,30,60,30,60);
      $settings['align']    = array('C','C','C','L','C','L');
      $settings['round']    = array(null,null,null,null,null,null);
      $settings['hide']     = array(0,0,0,0,0,0);

      $sql = "SELECT * FROM testDB.dbo.GLSuperiors_v1('38')";
      break;
  }
  $sth = $db->query( $sql );
  $pdf->BodyTable();
}
 

Allegati

Ciao Marino, ....grazie per l'aiuto.......ma non ne cavo un ragno dal buco !!!!!....o_O

ho provato a fare una pagina in questo modo ......ma credo di non averci capito nulla!!!1 ricevo errori su errori l'ultimo che ho ricevuto è :

Fatal error: Call to undefined function NS() in /membri/web1105/Registro/TEST_Stampa2.php on line 42

ecco la pagina che ho provato ad implementare con il tuo codice:
PHP:
<?php
ob_start();
session_start();

// Includo la connessione al database
require('config.php');
require_once NS('Iclasspdf');
// Se non è stata definita la variabile manda l'utente alla homepage
if(!isset($_SESSION['login']))
{
    header('Location: login.php');
    exit;
//.....
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
<link type="text/css" rel="stylesheet" media="all" href="ri.css"/>
<head>
    <title>Registro Ispezioni</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="HAPedit 3.0">

</head>

<body background="Immagini/431.png">

<?PHP

require_once "fpdf.php";

class PDF extends FPDF
{
    function BodyTable()
    {
        global $sth, $settings;

        while( $Row = $sth->fetch(PDO::FETCH_ASSOC) )
        {
            for($i=0; $i<$settings['Ncolumn']; $i++)
            {
                $value = nf($Row[$settings['column'][$i]], $settings['round'][$i]);


                $this->Cell($settings['colwidth'][$i], 6, $value, 'LR', 0, $settings['align'][$i], $fill);
            }
        }
    }


    function Header()
    {
        global $settings;

    }
}
    function Footer()
    {
        global $settings;
      
    }

$settings['title']    = 'TEST - STAMPA';     // titolo del listato
$settings['column']   = array('id', 'data','operatore'); // elenco delle colonne provenienti dal db da stampare
$settings['header']   = array('ID', 'DATA', 'OPERATORE');  // intestazione delle colonne
$settings['colwidth'] = array(20,20,200);                         // larghezza delle colonne
$settings['align']    = array('C','C','L');                       // allineamento delle colonne L - C - R
$settings['round']    = array(null,null,null);                    // eventuale arrotondamento da applicare / formato data
$settings['hide']     = array(1,1,0);                             // colonne da "identare" quando si ripete il codice

$sql = "SELECT * FROM Registro ORDER BY id, data, operatore";
$sth = $db-> $sql;

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

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

?>
 </body>
</html>

<?php
ob_end_flush();
?>

Mi aiuti con un codice A PROVA DI DEFICIENTE...... per arrivare a stampare ?

Ad essere onesti..... non capisco neanche dove va la struttura della classe......

ne dove inserire la connessione al DB.......

Grazie mille!!!!!!!!!

:(
 
Ultima modifica:
Ciao Alex, prova a modificare questi file con cui io lancio le stampe in pdf con la classe fpdf.
Metti le pagine dentro la cartella views cambia il nome dei miei campi e del db con i tuoi e fai le prove.
Io sono autodidatta e alle prime armi e chiedo spesso aiuto al forum, più di così non so fare...
Ciao
 

Allegati

Discussioni simili