Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822

    Parere e chiarimenti sulla formattazione del testo

    Ciao

    sono riuscito finalmente a risolvere il problema che avevo riguardante la realizzazione della stampa di etichette tramite PHP e le librerie FPDF.
    Ora funziona tutto ma come al solito vorrei cercare di perfezionare il risultato finale.

    Questo è il codice che vi sottopongo


    codice:
    $pdf = new PDF_Label('500');
    
    	 $pdf->AddPage();
     
    	$text = "";
    	 
    	 for($i = 0; $i < count($labels['persona']); $i++)
    	 {	 	 		 
      		if (strlen($labels['tessera'][$i]) >0)
    		{
                $tessera = $labels['tessera'][$i];
                $persona = $labels['persona'][$i];
                $presso = $labels['presso'][$i];
                $indirizzo = $labels['tipologia'][$i] . " " . $labels['indirizzo'][$i] . " " . $labels['num_civico'][$i];
                $localita = $labels['localita'][$i];
                $cap_eccetera = $labels['cap'][$i] . " " . $labels['comune'][$i] . " (" . $labels['provincia'][$i] . ") ";
                $citta = $labels['citta'][$i];
                $nazione = $labels['nazione'][$i];
    			
    		
    			
                $text = sprintf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n ", "$tessera" ,"$persona" , "$presso", "$indirizzo", "$localita" , "$cap_eccetera", "$nazione");
                $pdf->Add_Label($text);
    		}
    
    
     	}


    Le etichette vengono fatte bene però vorrei fare n controllo. Se determinati campi sono vuoti vorrei che, al posto di creare una riga vuota (come è ora) venissero proprio saltati

    Nella fattispecie è possibile e frequente che manchi il campo "PRESSO" che è nelle prime righe per cui l'etichetta viene stampata con una riga bucata.

    Usando il sprintf non saprei come fare per "saltare" la riga vuota. Avevo provato a generare una stringa che si compone mano a mano che trova i valori saltando quelli vuoti. Di solito è questo il metodo che uso. Controllo il campo, se esiste lo includo nella variabile, se invece è vuoto lo salto e passo al successivo.

    Ma con questa struttura, che non so come modificare per non incasinarmi, non so come fare..
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  2. #2
    se non ho letto male, sprintf deve essere necessariamente istruito sul numero di campi da formattare, e come secondo argomento può prendere anche un array credo.
    Potresti fare una cosa del genere:
    Codice PHP:
    $pdf = new PDF_Label('500');

         
    $pdf->AddPage();
     
        
    $text "";
         
         for(
    $i 0$i count($labels['persona']); $i++)
         {                   
              if (
    strlen($labels['tessera'][$i]) >0)
            {
                
    $stringa='';
                
    $stringa .= ($labels['tessera'][$i]!='')?$labels['tessera'].',':'';
                
    $stringa .= ($labels['persona'][$i]!='')?$labels['persona'].',':'';
                
    $stringa .= ($labels['presso'][$i]!='')?$labels['presso'].',':'';
                
    /* e così via per gli altri campi */
                
    $stringa=substr($stringa,0,-1);
                
    $campi=explode(','$stringa);
                
    $posizioni='';
                foreach(
    $campi as $x) {
                   
    $posizioni.="%s\n";
                }        
                
                
    $text sprintf($posizioni$campi);
                
    $pdf->Add_Label($text);
            }


         } 
    "Una volta che si saranno esaurite senza successo tutte le possibilita', ci sara' una soluzione, semplice e ovvia, che saltera' immediatamente all'occhio di chiunque altro."

    Guardate: Il Miracolo delle Noci!!

  3. #3
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    Non male la tua soluzione, appena posso la prova e ti faccio sapere.

    Grazie 1000 !

    PS : savonese anche tu ?
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  4. #4
    si, zona fornaci ^___^
    "Una volta che si saranno esaurite senza successo tutte le possibilita', ci sara' una soluzione, semplice e ovvia, che saltera' immediatamente all'occhio di chiunque altro."

    Guardate: Il Miracolo delle Noci!!

  5. #5
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    Mi dà il seguente errore :

    codice:
    Warning: sprintf() [function.sprintf]: Too few arguments in C:\Programmi\Apache Group\Apache2\htdocs\C500test\funzioni.php on line 1807
    FPDF error: Some data has already been output, can't send PDF file
    in pratica è la riga :

    codice:
    $text = sprintf($posizioni, $campi);
    ho provato ad effetture delle modifice perché temevo che il tuo array $campi non venisse preso come parametro e allora ho creato una stringa che contiene i valori dell'array e ho messo la stringa al posto del tuo array. Non cambia niente.

    Come mai quell' errore ?

    PS: io Rusca
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  6. #6
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    Credo di avere capito dove è l'errore ma non so come risolverlo

    codice:
    $text = sprintf($posizioni, $campi);
    vuole tanti paramentri dopo "$posizioni" quanto sono quelli presenti in $posizione.

    Per cui se la variabile $posizione è formata di 4 parametri, il codice dovrà essere

    codice:
    $text = sprintf($posizioni, $campo1, $campo2, $campo3, $campo4);
    E non basta mettere una SOLA variabile che abbia una struttura del tipo

    codice:
    $variabile = "$dato1, $dato2, $dato3"
    perché per la funzione è sempre e solo una variabile. Non so proprio come fare proprio perché il numero di variabili non è fisso ma dipende da quanti valori NON sono vuoti ...
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  7. #7
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    Funziona !! ME ne sono battutto le palle della struttura originale e ho fatto cosi

    codice:
    if (strlen($labels['tessera'][$i]) >0)
            {
                $stringa  = '';
                $stringa .= ($labels['tessera'][$i]!='')?$labels['tessera'][$i].',':'';
                $stringa .= ($labels['persona'][$i]!='')?$labels['persona'][$i].',':'';
                $stringa .= ($labels['presso'][$i]!='')?$labels['presso'][$i].',':'';
                $stringa .= (($labels['tipologia'][$i] . " " . $labels['indirizzo'][$i] . " " . $labels['num_civico'][$i])!='')?($labels['tipologia'][$i] . " " . $labels['indirizzo'][$i] . " " . $labels['num_civico'][$i]).',':'';
                $stringa .= ($labels['localita'][$i]!='')?$labels['localita'][$i].',':'';
                $stringa .= (($labels['cap'][$i] . " " . $labels['comune'][$i] . " (" . $labels['provincia'][$i] . ") ")!='')?($labels['cap'][$i] . " " . $labels['comune'][$i] . " (" . $labels['provincia'][$i] . ") ").',':'';
                $stringa .= ($labels['nazione'][$i]!='')?$labels['nazione'][$i].',':'';
     
                $stringa = substr($stringa, 0, -1);
                $campi = explode(',', $stringa);
               
    			$stringa_campi = '';		 
    			$array_valore = array();
    			
                foreach($campi as $nome => $valore)                   
    				$array_valore[] = $valore; 
                 
    			$quanti = count($array_valore);
    		 
    			for ($xx = 0 ; $xx < $quanti ; $xx ++)
    				$stringa_campi .= "$array_valore[$xx]" . "\n";	 			 
    		  
                $pdf->Add_Label($stringa_campi);
            }

    In pratica al posto del macchinoso sistema del sprintf ho creato una stringa tramite i valori memorizzati nell'array

    Grazie per il prezioso aiuto !
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.