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

    Stampare testo html interpretato

    Ciao a tutti, sto provando a stampare delle etichette, per cui essendomi creato uno stringbuilder con la stringa html che mi genera una tabella vorrei riuscire a stamparla su carta ma ovviamente ottengo la stampa di una stringa con i tag html... di seguito il codice

    codice:
    StringBuilder sb = new StringBuilder();
                    sb.append("<html>");
                    sb.append("<body>");
                    sb.append("<table style=\"border: 1px solid black; border-collapse: collapse;\">");
                    sb.append("<tr>");
                    sb.append("<th style=\"border: 1px solid black;\">Tipo Analisi: </th>");
                    sb.append("<td>Tipo Test</td>");
                    sb.append("</tr>");
                    sb.append("</table>");
                    sb.append("</body>");
                    sb.append("</html>");
                    
    g2d.drawString(sb.toString(), 0, fm.getAscent());
    g2d è un oggetto di tipo Graphics2D. Qualcuno sa darmi una mano?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    drawString non è assolutamente in grado di renderizzare html. Swing in generale è in grado di renderizzare html nei componenti che mostrano del testo (es. JLabel, JButton ecc...). In questo momento non saprei dirti cosa c'è "dietro" il rendering di html in Swing. Posso verificarlo più tardi.
    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
    drawString non è assolutamente in grado di renderizzare html. Swing in generale è in grado di renderizzare html nei componenti che mostrano del testo (es. JLabel, JButton ecc...). In questo momento non saprei dirti cosa c'è "dietro" il rendering di html in Swing. Posso verificarlo più tardi.
    Sono riuscito in effetti a renderizzarlo su un file pdf, ora il problema è che vorrei stamparlo usando il PageFormat che ho adattato per le etichette... magari sai darmi una delle tue dritte

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    36
    Questo è quello che ho scritto fin ora
    codice:
    public class PrinterTest {
    //    public static void main(String[] args) {
    //    PrintRequestAttributeSet attr=new HashPrintRequestAttributeSet();
    //            attr.add(OrientationRequested.LANDSCAPE);
      
    
    
        public void PrintLabel (double dimx, double dimy,String[] m1p, Vector m2p){
           
            PrinterJob pj = PrinterJob.getPrinterJob();
    //        pj.pageDialog(attr);
            if (pj.printDialog()) {
                PageFormat pf = pj.defaultPage();
                Paper paper = pf.getPaper();    
    //            double width = fromCMToPPI(3);
    //            double height = fromCMToPPI(8.8);    
                double width = fromCMToPPI(dimx);
                double height = fromCMToPPI(dimy);    
                paper.setSize(width, height);
                paper.setImageableArea(
                                fromCMToPPI(0.25), 
                                fromCMToPPI(0.25), 
                                width - fromCMToPPI(0.35), 
                                height - fromCMToPPI(0.35));                
                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(m1p,m2p), 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 {
            
            private String[] m1;    
            private Vector m2;
    
            private MyPrintable(String[] m1p, Vector m2p) {
                m1 = m1p;
                m2 = m2p;
            }
     
            @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());
                    
                    StringBuilder sb = new StringBuilder();
                    sb.append("<html>");
                    sb.append("<body>");
                    sb.append("<table style=\"border: 1px solid black; border-collapse: collapse;\">");
                    sb.append("<tr>");
                    sb.append("<th style=\"border: 1px solid black;\">Tipo Analisi: </th>");
                    sb.append("<td>Tipo Test</td>");
                    sb.append("</tr>");
                    sb.append("</table>");
                    sb.append("</body>");
                    sb.append("</html>");
    
                   try
                    {
                        OutputStream file = new FileOutputStream(new File("./temp/label.pdf"));
                        Document document = new Document();
                        PdfWriter writer = PdfWriter.getInstance(document, file);
                        document.open();
                        InputStream is = new ByteArrayInputStream(sb.toString().getBytes());
                        XMLWorkerHelper.getInstance().parseXHtml(writer, document, is);
                        
                        
                        
                        
                        document.close();
                        file.close();
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                    
                    //g2d.drawString(sb.toString(), 0, fm.getAscent());
                    
                    
                    
    
                    result = PAGE_EXISTS;    
                }    
                return result;    
            }
        }
        
        
    }
    praticamente cerco un modo per mandare in stampa quel pdf generato con il PageFormat configurato sopra

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    36
    Nessuna idea?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Il rendering di HTML in Swing si basa sotto-sotto sulle classi nel package javax.swing.text e sottopackage html / html.parser, quindi gli EditorKit, Document, ViewFactory/View, ecc...
    Sicuramente si può anche usare direttamente ma ... non è certo la API più facile e chiara da usare.

    In alternativa si potrebbe usare un JEditorPane che contiene HTML e poi "stamparlo" sfruttando il suo getPrintable ma comunque sarebbe tutto da valutare e sperimentare.

    Altrimenti cercare altre librerie di rendering di HTML. Di più non saprei ora.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    36
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Il rendering di HTML in Swing si basa sotto-sotto sulle classi nel package javax.swing.text e sottopackage html / html.parser, quindi gli EditorKit, Document, ViewFactory/View, ecc...
    Sicuramente si può anche usare direttamente ma ... non è certo la API più facile e chiara da usare.

    In alternativa si potrebbe usare un JEditorPane che contiene HTML e poi "stamparlo" sfruttando il suo getPrintable ma comunque sarebbe tutto da valutare e sperimentare.

    Altrimenti cercare altre librerie di rendering di HTML. Di più non saprei ora.
    Ciao, intanto grazie mille per la risposta, ma avendo creato il pdf come dicevo sopra non c'è un modo per mandarlo in stampa con il PageFormat prestabilito?

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.