Java: Problema Stampa tramite il metodo Print

di il
3 risposte

Java: Problema Stampa tramite il metodo Print

Buona sera a tutti ,
chiedo aiuto a voi perchè ho un problema con la stampa tramite il metodo print.
Premettendo che è la prima volta che eseguo la stampa; praticamente ho creato un'applicazione per un'azienda utilizzando un Container con i relativi metodi setBounds per impostare dimensioni e posizioni di tutti gli oggetti, utilizzando awt.
Succede che nel momento in cui avvio la stampa (tramite il metodo print), la stampante stampa su un foglio A4 solo una parte dell'intera pagina.
Vi allego il frammento di codice che ho utilizzato per la stampa e due immagini:
una è la pagina che si dovrebbe ottenere dalla stampa, e una è quella che si ottiene dalla stampa;
So che manca qualcosa nel mio codice, ma non riesco a capire cosa!!!!
spero di essere stata chiara, vi ringrazio in anticipo !!!


private void print(Container primanota) {
final Printable printable = new Printable() {
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
primanota.print(graphics);
if(pageIndex == 0){
return PAGE_EXISTS;
}
else if(pageIndex == 1){
return PAGE_EXISTS;
}
return pageIndex;
}
};
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(printable);
if(pj.printDialog()) {
try {
pj.print();
} catch (PrinterException e) {
e.printStackTrace();
}
}
}
});}

P.S. : Come potete notare la prima immagine (che è quella che viene stampata) non corrisponde all'altra!!!!
Ringrazio in anticipo chiunque possa aiutarmi!!!!!
Allegati:
20756_a882473e4f041fc91c17aab8be1b5dd2.png
20756_a882473e4f041fc91c17aab8be1b5dd2.png

20756_f8c8a1831139e739d03de186934728cb.png
20756_f8c8a1831139e739d03de186934728cb.png

3 Risposte

  • Re: Java: Problema Stampa tramite il metodo Print

    Mellone Morena ha scritto:


    Succede che nel momento in cui avvio la stampa (tramite il metodo print), la stampante stampa su un foglio A4 solo una parte dell'intera pagina.
    Il punto/problema è che se implementi tu Printable, è tutto a TUO carico. Nel senso che spetta a te fare tutti i calcoli matematici e le logiche per determinare: a) quante pagine sono necessarie, b) come/dove disporre ciò che c'è da stampare, c) come "reagire" alla richiesta della stampa di una pagina (il Printable è "passivo", è la Printing API che dice a te quando stampare e su quale pagina).

    Insomma, servirebbe parecchia logica. E quel primanota.print(graphics) da solo NON può sicuramente farlo perché "in mano" ha solo il Graphics e nient'altro di contesto per sapere il PageFormat e altro. Pertanto così come hai fatto finora ovviamente non va bene.

    Quello che potresti fare è la seguente cosa: tu hai un Container e puoi sapere quanti pixel è grande in larghezza/altezza. Facendo un po' di calcoli matematici, puoi determinare quale è il fattore di scalamento da applicare sul Graphics in modo da far stare TUTTO il Container stampato nella pagina. In pratica un algoritmo che si definisce "fit box". Data la "scatola" dell'area stampabile, determinare lo scalamento per far sì che indipendentemente dal aspect-ratio dell'oggetto stampato, ci stia nella scatola.

    Serve matematica e la conoscenza chiara di cosa è quel PageFormat e di come funzionano le unità di misura nel Graphics di stampa e di come funziona la matrice di trasformazione del Graphics.

    Se poi vuoi che si possano sfruttare più pagine, servono ancora più calcoli e logica.
  • Re: Java: Problema Stampa tramite il metodo Print

    Grazie tante, sei stato gentilissimo, in effetti non sono una esperta ancora, per questo chiedo a chi ne sa più si me, se potresti reindirizzarmi a qualche dispensa o a qualche libro da studiare per approfondire le mie conoscenze ne sarei davvero contenta!!!!
  • Re: Java: Problema Stampa tramite il metodo Print

    Mellone Morena ha scritto:


    se potresti reindirizzarmi a qualche dispensa o a qualche libro da studiare per approfondire le mie conoscenze ne sarei davvero contenta!!!!
    In italiano? Non saprei .... In inglese invece ci sono varie sezioni sul tutorial Oracle ufficiale a partire da: Trail: 2D Graphics

    Comunque qui sul forum di html.it c'è un mio vecchio vecchio esempio in cui stampavo un frame. Lì applicavo una logica "fit width", ovvero l'obiettivo era SOLO quello di "spalmare" la larghezza del frame sulla larghezza stampabile. Non consideravo l'altezza del frame nel calcolo, quindi a seconda della dimensione del frame e del formato della carta, la parte in fondo del frame poteva venire tagliata nella (unica) pagina in stampa.
    Passare da una logica "fit width" a una "fit box" non c'è moltissimo ma serve qualche altro calcolo, ovviamente.

    Inizia magari se vuoi a leggere quel mio esempio, provalo e prova a capire il senso del calcolo. Se hai dubbi .. chiedi.
Devi accedere o registrarti per scrivere nel forum
3 risposte