• User Newbie

    stampare indirizzi variabili

    Dovrei riuscire a creare un modello di lettera con un unico testo per tutta una serie di iscritti che vengono selezionati in un primo momento.

    Ho impaginato il risultato di una query in x pagine con una funzione trovata nelle pillole e tutto va bene, ora però non riesco a mandare in stampa tutte le pagine ( in pratica per ogni iscritto dovrebbe stampare uno stesso testo, le pagine sono dunque 1 per ogni indirizzo.)
    Problema: mi stampa solo il primo record.Esiste qualche funzione o altro che mi permetta di mandare in stampa tutte le pagine?;)


  • Super User

    devi visualizzare a video i dati oppure stamparle effettivamente?
    se il tuo caso è il secondo probabilmente stai parlando di una intranet.

    Il metodo più pratico via web per fare una stampa (da lanciare sulla stampante) è creare un pdf al volo.

    ovviamente i metodi sono i più disparati, da quelli a "costo zero" (non illuderti, non esiste il costo zero) a quelli super costosi. Da quelli che creano il pdf al volo a quelli che usano una stampante virtuale.

    se hai modo di creare un output su una stampante puoi quindi installare acrobat writer sul server e creare la stampa da li ma non è che sia un granchè flessibile (provato per esperienza).

    ora sto studiando una libreria per generare i pdf che sembra molto carina e non è nemmeno esageratamente complicata.

    prendendo il tuo caso possiamo, se ti va, sviluppare una piccola pillola per l'uso di questa libreria.

    se ti va descrivimi l'analisi del tuo progetto che proviamo a stendere il codice per fare i pdf usando questa libreria per php gratuita.


  • User Newbie

    @Tymba said:

    devi visualizzare a video i dati oppure stamparle effettivamente?
    se il tuo caso è il secondo probabilmente stai parlando di una intranet.

    Il metodo più pratico via web per fare una stampa (da lanciare sulla stampante) è creare un pdf al volo.

    ovviamente i metodi sono i più disparati, da quelli a "costo zero" (non illuderti, non esiste il costo zero) a quelli super costosi. Da quelli che creano il pdf al volo a quelli che usano una stampante virtuale.

    se hai modo di creare un output su una stampante puoi quindi installare acrobat writer sul server e creare la stampa da li ma non è che sia un granchè flessibile (provato per esperienza).

    ora sto studiando una libreria per generare i pdf che sembra molto carina e non è nemmeno esageratamente complicata.

    prendendo il tuo caso possiamo, se ti va, sviluppare una piccola pillola per l'uso di questa libreria.

    se ti va descrivimi l'analisi del tuo progetto che proviamo a stendere il codice per fare i pdf usando questa libreria per php gratuita.

    Devo stamparlo definitivamente... ho cercato materiale per generare pdf al volo e mi sono imbattuta in fpdf, che sostanzialmente dovrebbe essere gratuito, ma poi, convinta che non ci sarebbero stati grossi problemi a stampare impaginando i risultati con un record per pagina, ho continuato per questa strada... poi mi sono resa conto che non è così facile. Ora ho tolto l'impaginazione e stò cercando di inserire una interruzione di pagina con una parte di codice html, ma sono anche lì in alto mare in quanto non mi riconosce <br clear=all style='page-break-before:always'> inserito all'interno della riga php😢 ...stamattina vediamo, ho trovato uno script in una pillola cercando su google per stampare le buste e gli indirizzi all'inerno di una intranet... ora lo provo e ti faccio sapere. Per tornare al pdf ti posto il codice che ho all'interno di una pagina che crea pdf... poi ti posto il codice che mi serve per il mio modello di lettera, magari puoi aiutarmi a incastrare l'uno nell'altro? ecco qui:
    codice fpdf:
    [PHP]<?php
    //include("db.php");
    //print ($_REQUEST['query']."<br>");
    $server = "localhost";
    $utente = "stampasarda";
    $db_pass = "password";
    $datab = "stampasarda";

    $connessione = mysql_connect($server, $utente, $db_pass)
    or die (errore_server ());
    $db = mysql_select_db($datab, $connessione)
    or die (errore_server ());

    require('fpdf/fpdf.php');

    define('FPDF_FONTPATH','fpdf/font/');
    require_once('fpdf/pdflabel.php');

    /-------------------------------------------------
    To create the object, 2 possibilities:
    either pass a custom format via an array
    or use a built-in AVERY name
    -------------------------------------------------
    /

    // Example of custom format; we start at the second column
    $pdf = new PDF_Label(array('name'=>'perso1', 'paper-size'=>'A4', 'marginLeft'=>1, 'marginTop'=>1, 'NX'=>3, 'NY'=>8, 'SpaceX'=>6, 'SpaceY'=>6, 'width'=>66, 'height'=>38.1, 'metric'=>'mm', 'font-size'=>10), 3, 0);
    // Standard format
    //$pdf = new PDF_Label('L7163', 'mm', 1, 1);

    $pdf->Open();
    //$pdf->AddPage();

    // Print labels
    $risultato = mysql_query($_REQUEST['query'], $connessione);
    $num_righe = mysql_num_rows($risultato);

       while ($row = mysql_fetch_array($risultato))
    

    {
    $pdf->Add_PDF_Label(sprintf("\n%s\n%s\n%s - %s (%s) %s", "$row[cognome_nome]", "$row[indirizzo_res]", "$row[cap_res]", "$row[comune_res]", "$row[prov_res]", "$row[stato_res]"));
    }
    $pdf->Output();
    ?>[/PHP]

    ed ecco il codice del modello:
    [PHP]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Documento senza titolo</title>
    </head>

    <body>
    <style type="text/css">
    <!--

    -->
    </style>
    <title>Modello 1</title>
    <link href="stampamodello.css" rel="stylesheet" type="text/css" />
    <div id="contenitore">
    <div id="mittente"><img src="immagini\carta_intestata_image001.jpg" width="628" height="113" /></div>

    <div id="data"><em>Cagliari,
    <?
    $oggi = getdate();
    print($oggi['mday']."/".$oggi['mon']."/".$oggi['year']);

       ?>
    

    </em></div>
    <div id="contenitoreindirizzo">

    <div id="indirizzo">
    <div id="spett">Spett.</div>
    
    <?php 
    

    include("db.php");
    include("paging.func.php");
    if ($_REQUEST["tipo"] == 'pro'){
    $titolo = "PROFESSIONISTI";}
    elseif ($_REQUEST["tipo"] == 'pra'){
    $titolo = "PRATICANTI";}
    elseif ($_REQUEST["tipo"] == 'pub'){
    $titolo = "PUBBLICISTI";}
    elseif ($_REQUEST["tipo"] == 'spe'){
    $titolo = "SPECIALE";}
    else{
    print "<h1>ERRORE CODICE LISTA </h1><br>";
    }

    //sottomissione della query (come usare mysql_query())
    $res = paging("SELECT id_ass, cognome_nome, concat(indirizzo_res,'<br>',cap_res,' ',comune_res,' ','(',prov_res,')') as indirizzoresidenza, concat(indirizzo_dom,',',cap_dom,'-',comune_dom,'-','(',prov_dom,')') as indirizzodomicilio, selezione_ind, selezione_ind2
    FROM anagrafica WHERE (".$_REQUEST["tipo"]."_dataiscr !=0000-00-00)
    ORDER BY cognome_nome");
    $i = 0;
    /*
    verifica dei risultati: $res è un array.. l'elemento zero contiene
    il risultato della query per la pagina corrente... mentre l'elemento 1
    che useremo dove ci pare (nell'esempio lo usiamo alla fine) contiene
    il codice del minimenu' da dare semplicemente in output
    */
    if (!$res[0]) { echo "non ci sono dati";}
    else
    {
    /*sull'elemento zero si opera con un ciclo allo stesso modo
    in cui si farebbe con il risultato di mysql_query()
    */
    while($dati = mysql_fetch_array($res[0]))
    {

    if ($dati["selezione_ind"] == "res"){
       $riga ="<tr><td align=\"left\" width=\"264\"><td align=\"left\">$dati[cognome_nome]<br>$dati[indirizzoresidenza]</td></tr> ";
       echo "$riga";
    

    $i++;
    }
    elseif ($dati["selezione_ind2"] == "dom"){
    $riga ="<tr><td></td><td align="left">$dati[cognome_nome]</td><br><td align="left"> $dati[indirizzodomicilio] </td></tr> ";
    echo "$riga";
    }
    }
    }
    /*stampa del minimenu' di link alle altre pagine
    (poteva essere stampato anche prima del ciclo)
    */

    ?>
    <div id="pagine"><?PHP echo "<br>".$res[1]; ?></div></div>
    </div>

    <div id="testo>lo deve prendere dal database, devo ancora inserire il codice</div>

    <div id="firma">
    <p align="center"><span class="Stile2">Il presidente </span> </p>
    <p align="center"><em> firma</em> </p>
    <p align="center"><img src="immagini\Firma.jpg" width="230" height="80" /></p>
    </div>
    </div>

    funzione impaginazione:
    [PHP]<?php

    /**

    • Funzione per la paginazione automatica delle query, con propagazione delle querystring.
    • Grazie a piero.mac per la compatibilità con mysql 5 e a dino2004 per il debugging
    • @author Todarello Guido - }gu|do[z]{®© [email protected] - Supporto su http://www.guidoz.it/forum
    • @version 1.3 (24/10/2006)
    • @param string $query La query sql con cui intendiamo estrarre i nostri dati
    • @param integer $x_pag Il numero di record che vogliamo visualizzare in una singola pagina (default: 10)
    • @param integer $num_links Il numero di link alle pagine precedenti e successive da stampare nel menu' (default: 5)
    • @return array Il primo valore è il risultato della query, il secondo il menu' stampabile
      */

    function paging($query,$x_pag=1,$num_links=5)
    {
    //conteggio i record presenti
    $resource = mysql_query($query);
    if(!$resource) { echo 'Si è verificato un errore con la query inserita.<br /> L'errore restituito è: <i>', mysql_error(),'</i>'; exit; }
    $righe = mysql_num_rows($resource);
    if ($righe == 0){ return false; } //non ci sono record

    //calcolo il numero di pagine necessarie per visualizzare i dati
    $numpages = ceil($righe/$x_pag);
     
    //ottengo il numero della pagina corrente, se manca lo imposto ad 1
    $pag = isset($_GET['pag'])? $_GET['pag'] : 1;
     
    //imposto il primo estremo del limit
    $da = ($pag-1) * $x_pag;
     
    //appendo il limit alla query originaria
    $query .= " LIMIT $da,$x_pag";
     
    //gesisco la propagazione della query string ricopiandola tutta in una variabile che appenderò ai link
    $querystring = '';
    foreach($_GET as $k => $v)
    	{
    		if ($k != 'pag') //escludo la variabile usata dalla paginazione ^_^
    			$querystring .= "&".$k."=".$v;
    	}
    
    //inizializzo una stringa vuota in cui appenderò l'output del menu'
    $menu = '';
    
    //SERIE DI CONDIZIONALI IN CASCATA PER COSTRUIRE IL MENU'
    
    //se il numero di pagine necessarie è minore del massimo numerodi link richiesto, allora li stampo tutti senza problemi...
    if($numpages <= $num_links) 
    	{
    		if($numpages > 1 )//...a meno che non basti la sola pagina corrente
    			{
    				for ($pagina = 1; $pagina <= $numpages; $pagina++)
    					{
    						if ($pagina == $pag)
    							$menu .= "<span class=\"pag_selected\"> $pagina </span>&nbsp; ";
    						else
    							$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>&nbsp; ";
    					}
    			}
    	}
    
    //se la pag corrente è tra le prime $num_links/2 --> stampo i primi $nun_links link
    else if($pag <= ceil($num_links/2))
    	{
    		for ($pagina=1; $pagina<=$num_links; $pagina++)
    			{
    				if ($pagina == $pag)
    					$menu .= "<span class=\"pag_selected\"> $pagina </span>&nbsp; ";
    				else
    					$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>&nbsp; ";
    			}
    		//link diretto all'ultima pagina
    		$menu .= "<a class=\"pag_link\" href=\"?pag={$numpages}{$querystring}\" title=\"Vai all'ultima pagina\"> >> </a>&nbsp; ";
    	}
    
    //se la pag corrente è tra le ultime $num_links/2 --> stampo gli ultimi $nun_links link
    else if($pag > ($numpages-ceil($num_links/2)))
    	{
    		//link diretto alla prima pagina
    		$menu .= "<a class=\"pag_link\" href=\"?pag=1{$querystring}\" title=\"Vai alla prima pagina\"> << </a>&nbsp; ";
    		
    		for ($pagina=$numpages-$num_links+1; $pagina<=$numpages; $pagina++)
    			{
    				if ($pagina == $pag)
    					$menu .= "<span class=\"pag_selected\"> $pagina </span>&nbsp; ";
    				else
    					$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>&nbsp; ";
    			}
    	}
    
    //Altrimenti la pagina corrente è una delle pagine centrali --> stampo i $nun_links/2 link prima ed $nun_links/2 link dopo
    else
    	{
    		//link diretto alla prima pagina
    		$menu .= "<a class=\"pag_link\" href=\"?pag=1{$querystring}\" title=\"Vai alla prima pagina\"> << </a>&nbsp; ";
    		
    		for ($pagina = $pag-ceil($num_links/2-1); $pagina <= $pag+ceil($num_links/2-1); $pagina++)
    			{
    				if ($pagina == $pag)
    					$menu .= "<span class=\"pag_selected\"> $pagina </span>&nbsp; ";
    				else
    					$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>&nbsp; ";
    			}
    			
    		//link diretto all'ultima pagina
    		$menu .= "<a class=\"pag_link\" href=\"?pag={$numpages}{$querystring}\" title=\"Vai all'ultima pagina\"> >> </a>&nbsp; ";
    	}
    

    //restituisco il risultato della query, e l'output del menu'
    return array(mysql_query($query),$menu);
    }

    ?>
    [/PHP]

    ti posto la versione con l'impaginazione e ti ringrazio da ora per l'interesse.ciao a presto:ciauz:

    </body>
    </html>
    [/PHP]


  • Super User

    ho preso il tuo caso ad esempio e vorrei realizzare questa pillolina.

    spero non ti dispiaccia 🙂


  • User Newbie

    @Tymba said:

    ho preso il tuo caso ad esempio e vorrei realizzare questa pillolina.

    spero non ti dispiaccia 🙂

    No, assolutamente, negli script utilizzati la funzione ha nel codice i nomi degli autori ecc. quindi non credo ci siano problemi, mi fai sapere se è una realizzazione particolarmente difficoltosa e se ci vuole molto tempo a compilare il pdf... così mi regolo con i miei tempo, visto che stò sbattendo la testa ogni volta che cerco qualche altra soluzione.
    a proposito la libreria printer.dll sai come si può installare per ottenere l'estensione php?:x