Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    36

    Stampa su stampante etichette java

    Ciao a tutti,
    ho una piccola classe java con cui sto provando a stampare delle etichette in formato landascape ma aimè non ne vuole sapere proprio, continua a stampare portrait, non riesco nell'intento neanche cambiando le impostazioni dalla stampante... qualsiasi cosa faccia stampa sempre in verticale... di seguito il codice

    codice:
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.geom.Rectangle2D;
    import java.awt.print.PageFormat;
    import java.awt.print.Paper;
    import java.awt.print.Printable;
    import java.awt.print.PrinterException;
    import java.awt.print.PrinterJob;
    
    
    
    public class PrinterTest {
        public static void main(String[] args) {
    //PrintRequestAttributeSet attr=new HashPrintRequestAttributeSet();
    //	attr.add(OrientationRequested.LANDSCAPE);
    //        
            PrinterJob pj = PrinterJob.getPrinterJob();
    //        pj.pageDialog(attr);
            if (pj.printDialog()) {
                PageFormat pf = pj.defaultPage();
                Paper paper = pf.getPaper();    
                double width = fromCMToPPI(3.5);
                double height = fromCMToPPI(8.8);    
                
                paper.setSize(width, height);
                paper.setImageableArea(
                                fromCMToPPI(0.25), 
                                fromCMToPPI(0.5), 
                                width - fromCMToPPI(0.35), 
                                height - fromCMToPPI(1));                
                System.out.println("Before- " + dump(paper));    
    //            pf.setOrientation(PageFormat.PORTRAIT);
                pf.setOrientation(PageFormat.LANDSCAPE);
                pf.setPaper(paper);    
                System.out.println("After- " + dump(paper));
                System.out.println("After- " + dump(pf));                
                dump(pf);    
                PageFormat validatePage = pj.validatePage(pf);
                System.out.println("Valid- " + dump(validatePage));                
                //Book book = new Book();
                //book.append(new MyPrintable(), pf);
                //pj.setPageable(book);    
                pj.setPrintable(new MyPrintable(), pf);
                try {
                    pj.print();
                } catch (PrinterException ex) {
                    ex.printStackTrace();
                }    
            }    
        }    
            
            protected static double fromCMToPPI(double cm) {            
            return toPPI(cm * 0.393700787);            
        }
    
    
        protected static double toPPI(double inch) {            
            return inch * 72d;            
        }
    
    
        protected static String dump(Paper paper) {            
            StringBuilder sb = new StringBuilder(64);
            sb.append(paper.getWidth()).append("x").append(paper.getHeight())
               .append("/").append(paper.getImageableX()).append("x").
               append(paper.getImageableY()).append(" - ").append(paper
           .getImageableWidth()).append("x").append(paper.getImageableHeight());            
            return sb.toString();            
        }
    
    
        protected static String dump(PageFormat pf) {    
            Paper paper = pf.getPaper(); 
            return dump(paper);    
        }
    
    
        public static class MyPrintable implements Printable {
    
    
            @Override
            public int print(Graphics graphics, PageFormat pageFormat, 
                int pageIndex) throws PrinterException {    
                System.out.println(pageIndex);                
                int result = NO_SUCH_PAGE;    
                if (pageIndex < 1) {                    
                    Graphics2D g2d = (Graphics2D) graphics;                    
                    System.out.println("[Print] " + dump(pageFormat));                    
                    double width = pageFormat.getImageableWidth();
                    double height = pageFormat.getImageableHeight();    
                    g2d.translate((int) pageFormat.getImageableX(), (int) pageFormat.getImageableY());                    
                    g2d.draw(new Rectangle2D.Double(1, 1, width - 1, height - 1)); 
                    FontMetrics fm = g2d.getFontMetrics();
                    g2d.drawString("0x0", 0, fm.getAscent());
                    //g2d.rotate(-Math.PI);
                    result = PAGE_EXISTS;    
                }    
                return result;    
            }
        }
    }
    le ho provate tutte, qualcuno mi aiuta?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da loop4633 Visualizza il messaggio
    ho una piccola classe java con cui sto provando a stampare delle etichette in formato landascape ma aimè non ne vuole sapere proprio, continua a stampare portrait
    Giusto per chiarire: il setOrientation non cambia il formato del "foglio" .. cambia il senso delle coordinate!

    Se metti LANDSCAPE: l'origine è in basso/sinistra; x va verso l'alto; y va verso destra
    Se metti PORTRAIT: l'origine è in alto/sinistra; x va verso destra; y va verso il basso

    Quindi se hai messo
    double width = fromCMToPPI(3.5);
    double height = fromCMToPPI(8.8);

    di fatto è un "portrait" (come si intende solitamente, cioè più alto che largo) e se usi LANDSCAPE semplicemente usi il senso delle coordinate come detto sopra. Insomma, PORTRAIT vs LANDSCAPE (c'è anche REVERSE_LANDSCAPE) cambia solo l'approccio che usi per determinare le coordinate delle cose da stampare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    36
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Giusto per chiarire: il setOrientation non cambia il formato del "foglio" .. cambia il senso delle coordinate!

    Se metti LANDSCAPE: l'origine è in basso/sinistra; x va verso l'alto; y va verso destra
    Se metti PORTRAIT: l'origine è in alto/sinistra; x va verso destra; y va verso il basso

    Quindi se hai messo
    double width = fromCMToPPI(3.5);
    double height = fromCMToPPI(8.8);

    di fatto è un "portrait" (come si intende solitamente, cioè più alto che largo) e se usi LANDSCAPE semplicemente usi il senso delle coordinate come detto sopra. Insomma, PORTRAIT vs LANDSCAPE (c'è anche REVERSE_LANDSCAPE) cambia solo l'approccio che usi per determinare le coordinate delle cose da stampare.
    Grazie mille per il tuo aiuto sempre presente andbin, avevo pure invertito height con width invertendo le posizioni e non i valori, sono un pirla basta.
    Grazie mille

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    36
    Hai qualche idea di come possa creare una tabella da stampare nell'etichetta e quindi passare al metodo .draw di Graphics2D? Ti chiedo questo perchè avevo creato una PdfPTable sfruttando la libreria iText ma non mi viene facile gestire le dimensioni dell'etichetta... c'è un modo per stampare una PdfPTable con Graphics2D?
    Ultima modifica di loop4633; 11-02-2016 a 17:30

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.