Vimax
20-04-2010, 18:13
Salve a tutti. Premetto che mi son girato un bel pò di guide/codici e post qui sul forum prima di decidermi a postare,ma sto in crisi <.<.
Quello che devo fare è far stampare una semplice stringa di testo a java, su una determinata stampante, senza far apparire alcun prompt (niente printDialog per intenderci), ridimensionando però la pagina.
Il mio codice è
import javax.print.*;
import java.awt.*;
import java.awt.print.*;
public class Provaprint {
static String testo = "ahahah";
static PageFormat pf = new PageFormat();
static Paper paper = new Paper();
static int larghezza = 228, altezza = 100;
static Font font = new Font("Dialog", Font.PLAIN, 15);
public static void main(String args[]) {
PrintService[] services = PrintServiceLookup.lookupPrintServices(null,null);
// just display all printer name
for (int i = 0; i < services.length; i++) {
System.out.println(services[i].getName()); // --> get printer name
}
PrinterJob job = PrinterJob.getPrinterJob();
try{ job.setPrintService(services[3]);
}catch(PrinterException e){}
pf=job.defaultPage();
paper.setSize(larghezza,altezza);
paper.setImageableArea(10, 10, larghezza-20, altezza-20);
pf.setPaper(paper);
robaDaStampare rbd= new robaDaStampare(testo,font);
rbd.setPageFormat(pf); //questo è dannatamente inutile e ridondante...e infatti non funziona
pf = job.validatePage(pf);
job.setPrintable(rbd,pf);
try {job.print();
} catch(PrinterException e){}
}
}
class robaDaStampare implements Printable{
private String testo;
private Font font;
PageFormat pageFormat;
public robaDaStampare(String tes,Font fon){
this.testo=tes;
this.font=fon;
}
public int print(Graphics g, PageFormat pageFormat, int page) throws
PrinterException {
if (page > 0) { /* We have only one page, and 'page' is zero-based */
return NO_SUCH_PAGE;
}
System.out.println("Y " + pageFormat.getImageableY());
System.out.println("height" + pageFormat.getImageableHeight());
g.setFont(font);
g.drawString(testo, 50, 50);
return PAGE_EXISTS;
}
public void setPageFormat(PageFormat pageFo) {
pageFormat = pageFo;
}
}
Lasciando perdere la storia sui nomi dei service (Che mi serviranno in seguito per selezionare automaticamente la stampante), stampa la stringa in alto a sx, ma la stampante di adobe mi lascia il voglio come un A4 standard, nonostante i due System.out mi diano la corretta dimensione.
Ora, quello che mi manda piu in crisi è che se modifico il metodo print inserendo di nuovo la formattazione della pagina (non so perchè, l'ho fatto a tentativi), nonostante la prima pagina rimane un a4, se stampo piu di una pagina (mettendo if(page >2)) dalla seconda in poi escon tutte della dimensione corretta :cry:
Praticamente dichiaro "larghezza" , "altezza" e "paper" anche nella class robaDaStampare, e poi modifico così il print:
public int print(Graphics g, PageFormat pageFormat, int page) throws
PrinterException {
pageFormat=job.defaultPage();
paper.setSize(larghezza,altezza);
paper.setImageableArea(10, 10, larghezza-20, altezza-20);
pageFormat.setPaper(paper);
if (page > 0) { /* We have only one page, and 'page' is zero-based */
return NO_SUCH_PAGE;
}
System.out.println("Y " + pageFormat.getImageableY());
System.out.println("height" + pageFormat.getImageableHeight());
g.setFont(font);
g.drawString(testo, 50, 50);
return PAGE_EXISTS;
}
Non sò cosa fare :(
Quello che devo fare è far stampare una semplice stringa di testo a java, su una determinata stampante, senza far apparire alcun prompt (niente printDialog per intenderci), ridimensionando però la pagina.
Il mio codice è
import javax.print.*;
import java.awt.*;
import java.awt.print.*;
public class Provaprint {
static String testo = "ahahah";
static PageFormat pf = new PageFormat();
static Paper paper = new Paper();
static int larghezza = 228, altezza = 100;
static Font font = new Font("Dialog", Font.PLAIN, 15);
public static void main(String args[]) {
PrintService[] services = PrintServiceLookup.lookupPrintServices(null,null);
// just display all printer name
for (int i = 0; i < services.length; i++) {
System.out.println(services[i].getName()); // --> get printer name
}
PrinterJob job = PrinterJob.getPrinterJob();
try{ job.setPrintService(services[3]);
}catch(PrinterException e){}
pf=job.defaultPage();
paper.setSize(larghezza,altezza);
paper.setImageableArea(10, 10, larghezza-20, altezza-20);
pf.setPaper(paper);
robaDaStampare rbd= new robaDaStampare(testo,font);
rbd.setPageFormat(pf); //questo è dannatamente inutile e ridondante...e infatti non funziona
pf = job.validatePage(pf);
job.setPrintable(rbd,pf);
try {job.print();
} catch(PrinterException e){}
}
}
class robaDaStampare implements Printable{
private String testo;
private Font font;
PageFormat pageFormat;
public robaDaStampare(String tes,Font fon){
this.testo=tes;
this.font=fon;
}
public int print(Graphics g, PageFormat pageFormat, int page) throws
PrinterException {
if (page > 0) { /* We have only one page, and 'page' is zero-based */
return NO_SUCH_PAGE;
}
System.out.println("Y " + pageFormat.getImageableY());
System.out.println("height" + pageFormat.getImageableHeight());
g.setFont(font);
g.drawString(testo, 50, 50);
return PAGE_EXISTS;
}
public void setPageFormat(PageFormat pageFo) {
pageFormat = pageFo;
}
}
Lasciando perdere la storia sui nomi dei service (Che mi serviranno in seguito per selezionare automaticamente la stampante), stampa la stringa in alto a sx, ma la stampante di adobe mi lascia il voglio come un A4 standard, nonostante i due System.out mi diano la corretta dimensione.
Ora, quello che mi manda piu in crisi è che se modifico il metodo print inserendo di nuovo la formattazione della pagina (non so perchè, l'ho fatto a tentativi), nonostante la prima pagina rimane un a4, se stampo piu di una pagina (mettendo if(page >2)) dalla seconda in poi escon tutte della dimensione corretta :cry:
Praticamente dichiaro "larghezza" , "altezza" e "paper" anche nella class robaDaStampare, e poi modifico così il print:
public int print(Graphics g, PageFormat pageFormat, int page) throws
PrinterException {
pageFormat=job.defaultPage();
paper.setSize(larghezza,altezza);
paper.setImageableArea(10, 10, larghezza-20, altezza-20);
pageFormat.setPaper(paper);
if (page > 0) { /* We have only one page, and 'page' is zero-based */
return NO_SUCH_PAGE;
}
System.out.println("Y " + pageFormat.getImageableY());
System.out.println("height" + pageFormat.getImageableHeight());
g.setFont(font);
g.drawString(testo, 50, 50);
return PAGE_EXISTS;
}
Non sò cosa fare :(