Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [Java] Errore in stampa su più pagine.

    cioa raga
    non so se il titolo rende l'idea , ma ho un problema per la stampa in java su più pagine prelevando dati da un database. non riesco a capire dove sbaglio.

    premettendo che la query esposta è composta da 157 righe (ma è un fattore variabile) e che le pagine stampate devono contenere 23 righe.

    detto ciò vi posto il codice , nel quale non riesco a capire l'errore.

    l'errore per l'esempio esposto è : stampa solo 6 pagine delle 8 calcolate, e la stampa viene sempre ripetuta anche quando chiudo l'applicazione. avvolta ne stampa 7 di pagine.

    considerazioni : credo che la 8 e ultima pagina non venga proprio costruita perche le righe non coprono l'intera pagina, essendo solo 14 righe e non 23.

    spero di essere stato chiaro e che possiate aiutarmi.

    grazie anticipatamente.

  2. #2
    Main

    codice:
    public class mainStampa{
    	static Connection con = null;
    	static ModelloTabella modello;
    public static void main(String[] args) {
    	try {
    		Class.forName("com.mysql.jdbc.Driver").newInstance();
    		con =DriverManager.getConnection("jdbc:mysql://localhost:3306/nuceria","root","");
    		Statement st = con.createStatement();
    		String query = "SELECT sett_prod,cod_commessa,cliente.ragione_sociale,cod_specifica,specifica.descrizione,quantita,data_consegna,ore FROM commessa " +
    		"left join cliente on commessa.cod_cliente=cliente.id_cliente " +
    		"left join specifica on commessa.cod_specifica=specifica.cod_etichetta " +
    		"where commessa.nome_macchina='168' and commessa.stato='0' order by sett_prod,data_consegna;";
    		ResultSet rs = st.executeQuery(query);
    		modello = new ModelloTabella(rs);
    	} catch (InstantiationException e1) {e1.printStackTrace();
    	} catch (IllegalAccessException e1) {e1.printStackTrace();
    	} catch (ClassNotFoundException e1) {e1.printStackTrace();
    	} catch (SQLException e) {e.printStackTrace();}
    	
    // Creo un PrinterJob
    	PrinterJob job = PrinterJob.getPrinterJob();
    // creo una pagina landscape
    	PageFormat pfl = job.defaultPage();
    	pfl.setOrientation(PageFormat.PORTRAIT);
    // Creo un book
    	Book bk = new Book();
    // Stampa PaintContent ( 2 = due pagine da stampare )
    	int x = modello.getRowCount();
    	System.out.println(x);
    	x=x/23;
    	x=x+2;
    	System.out.println(x);
    	bk.append(new PaintContent(modello,x), job.defaultPage(), x);
    	// Passo il book al PrinterJob
    	job.setPageable(bk);
    	
    // Apro la dialog box
    	if (job.printDialog()){
    // Stampo a meno che non venga premuto annulla dall'utente
    			try {
    // Imposto il numero di copie
    				//job.setCopies(1);
    				job.print();
    				//System.exit(0);
    			}
    			catch (Exception e) {System.out.println("ERRORE: " + e);
    			}
    	}
    }
    }

  3. #3
    PaintContent

    codice:
    class PaintContent implements Printable{
    	ModelloTabella modello;
    	int pag;
    public PaintContent (ModelloTabella model, int pagine){
    	modello=model;
    	pag=pagine;
    }
    public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
    
    int xo = (int) pf.getImageableX();
    int yo = (int) pf.getImageableY();
    //indice della righa x
    int num = 0;
    
    // posizione nella pagina rispetto all'asse Y
    int y = 0;
    // scorre tutte le pagine da Y+28 (lascio margine superiore) alla lunghezza massima stampabile della pagina
    int tmp=pageIndex;
    tmp= (tmp*23)-23;
    while(y+28 < pf.getImageableHeight()){
    // SONO NELLA PRIMA PAGINA
    	if(pageIndex == 0){
    			g.drawLine(xo, yo, xo+500, yo);
    			g.drawString("CARICO RIDOTTO", xo+10, yo+20);
    			g.drawLine(xo, yo+30, xo+500, yo+30);
    			y += (pf.getImageableHeight() - 500);
    	}
    // TUTTE LE ALTRE PAGINE
    	else{
    		if((num+tmp)<modello.getRowCount()){
    		g.drawString(" Pagina " + pageIndex + " COMMESSA " + modello.getValueAt(num+tmp, 1) +" numero "+(num+tmp), xo+10, yo+y+12);
    		num++;
    // Y = spazio fra una riga e quella successiva
    		y += 30;
    		}
    	}
    }
    if(pageIndex<pag){
    return Printable.PAGE_EXISTS;
    }else{
    return Printable.NO_SUCH_PAGE;
    }
    }
    }

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.