Visualizzazione dei risultati da 1 a 10 su 10

Discussione: printer_draw_text

  1. #1

    printer_draw_text

    Un caro saluto a tutti.

    Con la funzione printer_draw_text di php devo cercare di stampare "su carta" il risultato di una query che preleva i dati da una tabella.

    Query con ciclo for che interroga il db mysql per estrarre i dati:

    Codice PHP:

    $query 
    "SELECT * FROM ordine";
    $result mysql_query($query) or die(mysql_error());
    $numrows mysql_num_rows($result);
    if (
    $numrows==0){
    print
    " Nessun ordine trovato";
    }
    else
    {

    for(
    $x=0$x<$numrows$x++){
    $resrow mysql_fetch_array($result);

    $id_ordine $resrow['id'];
    $id_piatto $resrow['id_piatto'];
    $nome_piatto$resrow[nome_piatto];
    $codice_piatto $resrow['codice_piatto'];
    $prezzo_riga_ordine $resrow['prezzo'];
    $timestamp $resrow['timestamp'];

    }} 
    Ora devo stampare su carta le righe estratte:

    Codice PHP:

    $stampante
    =printer_open("Samsung SCX-4725 Series PCL 6"); // Apro la connessione 
    printer_start_doc($stampante,"Titolo del Documento"); // Inizio documento 
    printer_start_page($stampante); //Inizio pagina 1 


    $font=printer_create_font("Arial"14876PRINTER_FW_MEDIUMfalsefalse,false, -50); 
    printer_select_font($font); 

    printer_draw_text($stampante,"Piatto $nome_piatto €: $prezzo_riga_ordine / Sub tot: € $totale"1010); // Ecco che scriviamo!!!

    printer_delete_font($font); 
    printer_end_page($stampante); // Fine pagina 1 
    Chiaramente così stampo su carta solo la prima riga estratta dal db, se invece inserisco la funzione printer_draw_text con i relativi comandi all'interno del ciclo for mi stampa tante pagine quante sono le righe estratte dal cliclo, la soluzione potrebbe essere inserire i risultati del ciclo for in un un array e succesivamente farlo stampare, ma a priori non so di quante righe di tabella sarà composto il mio risultato !? la mia breve esperienza in programmazione non mi permette di proseguire ma sarei ansionso di trovare la soluzione, qualcuno potrebbe indirizzarmi sulla strada giusta ? Grazie !

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Hai già trovato la soluzione da te in pratica, inizializza la pagina prima del ciclo, nel ciclo accumula il testo da stampare e fuori di esso mettilo nella pagina e stampa

  3. #3
    Quindi dici di creare un array che contiente tutti i dati del ciclo for ?
    in che modo ?
    Non riesco a capire come, mi faresti un esempio ?

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    forse una cosa tipo (pseudocodice)
    Codice PHP:
    // cicli tutti i risultati e li accodi in unica variabile 
    $testo_da_stampare "";

    while (
    i risultati della tua query) {
          
    $testo_da_stampare .= "Piatto $nome_piatto €: $prezzo_riga_ordine / Sub tot: € $totale \r\n";
          
    // "\r\n" penso che vadano bene come mandata a capo
    }

    printer_draw_text($stampante,$testo_da_stampare1010); 
    Magari fai una prova con un limitato numero di record.

  5. #5
    Ok, cosa intendi esattamente nel ciclo while con " i risultati della tua query " ?

  6. #6
    OK ho risolto così:

    Codice PHP:

    $sql 
    "SELECT * FROM ordine"
    $result mysql_query($sql); 

    $ordine_stampa="";

    while(
    $row mysql_fetch_assoc($result)) { 

    $id_piatto=$row['id_piatto']; $codice_piatto=$row['codice_piatto']; $quantita=$row['quantita']; $prezzo=$row['prezzo']; $timestamp=$row['timestamp'];

    $ordine_stampa.= "Id piatto $id_piatto / Codice piatto $codice_piatto /  Quantità $quantita / Prezzo $prezzo / Timestamp $timestamp \r\n"



    }

    ///INIZIO CODICE PER L'INVIO ALLA PRITER LOCALE

    $stampante=printer_open("Samsung SCX-4725 Series PCL 6"); // Apro la connessione 
    printer_start_doc($stampante,"Titolo del Documento"); // Inizio documento 
    printer_start_page($stampante); //Inizio pagina 1 

    //$font=printer_create_font("Arial", 148, 76, PRINTER_FW_MEDIUM, false, false,false, -50); 
    //printer_select_font($font); 
    printer_draw_text($stampante,$ordine_stampa1010); // Ecco chescriviamo!!! 
    //printer_delete_font($font); 

    printer_end_page($stampante); // Fine pagina 1 
    //printer_start_page($stampante); //Inizio pagina 2 

    //printer_draw_bmp($stampante, "c:\immagine.bmp", 10, 10); //Ecco la nostraimmagine!!! 

    //printer_end_page($stampante); // Fine pagina 2 
    printer_end_doc($stampante); // Fine documento 
    printer_close($stampante); // Chiudo la connessione



    echo $ordine_stampa
    Nasce ora un problema per far andare a capo alla fine della stringa, cioè la variabile:

    Codice PHP:
    $ordine_stampa.= "Id piatto $id_piatto / Codice piatto $codice_piatto /  Quantità $quantita / Prezzo $prezzo / Timestamp $timestamp \r\n"
    dovrebbe andare a capo ad ogni fine ciclo, ma non ci va ne con \r\n ne con
    .
    A video con
    va a capo ma in stampa risulta una stringa intera.

  7. #7
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    ok, quindi il "\r\n" non manda a capo in stampa

    ho trovato a questo link uno spunto interessante, ma non so se possa andare bene (non posso neanche testare, non ho un ambiente windows per sviluppare)

    provo a correggere il codice che hai messo tu, facendo un mix tra il primo che hai postato, quello che ti ho suggerito e quello della pagina linkata

    Codice PHP:

    ///INIZIO CODICE PER L'INVIO ALLA PRITER LOCALE 

    $stampante=printer_open("Samsung SCX-4725 Series PCL 6"); // Apro la connessione  
    printer_start_doc($stampante,"Titolo del Documento"); // Inizio documento  
    printer_start_page($stampante); //Inizio pagina 1  

    //$font=printer_create_font("Arial", 148, 76, PRINTER_FW_MEDIUM, false, false,false, -50);  
    //printer_select_font($font);  

    $sql "SELECT * FROM ordine";  
    $result mysql_query($sql);  

    while(
    $row mysql_fetch_assoc($result)) {  

    $id_piatto=$row['id_piatto']; 
    $codice_piatto=$row['codice_piatto']; 
    $quantita=$row['quantita']; 
    $prezzo=$row['prezzo']; 
    $timestamp=$row['timestamp']; 

    $ordine_stampa "Id piatto $id_piatto / Codice piatto $codice_piatto /  Quantità $quantita / Prezzo $prezzo / Timestamp $timestamp ";  

    printer_draw_text($stampante,$ordine_stampa1010); // Ecco chescriviamo!!!  



    //printer_delete_font($font);  

    printer_end_page($stampante); // Fine pagina 1  
    //printer_start_page($stampante); //Inizio pagina 2  

    //printer_draw_bmp($stampante, "c:immagine.bmp", 10, 10); //Ecco la nostraimmagine!!!  

    //printer_end_page($stampante); // Fine pagina 2  
    printer_end_doc($stampante); // Fine documento  
    printer_close($stampante); // Chiudo la connessione 



    echo $ordine_stampa//stamperà solo l'ultimo record 

  8. #8
    No, così stampa solo una riga sia a video che sulla printer.

  9. #9
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    sì? mi sembra strano però, nel while viene chiamata n volte la funzione che _draw_text e la pagina viene chiusa una volta che il while si è completato

  10. #10
    infatti, eppure è così..

    Ma possibile perdere un pomeriggio per sta cosa.. Cee nervi..
    Non so davvero più dove cercare.

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.