Errore: No print service found

di il
11 risposte

Errore: No print service found

Salve a tutti, ho costruito una semplice web app con java in locale funziona correttamente solo che appena ho caricato il file war sul un server funziona tutto correttamente tranne la stampa che da questo errore:
java.awt.print.PrinterException: No print service found.
at sun.print.RasterPrinterJob.print(Unknown Source)
at sun.print.RasterPrinterJob.print(Unknown Source)
at eliminacode.Stampa.stampaBiglietto(Stampa.java:51)
at eliminacode.Seliminacode1.doPost(Seliminacode1.java:90)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2517)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2506)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

Il tasto inserito nella jsp dovrebbe stampare nella stampante predefinita del client cosa succede qualcuno può aiutarmi a sapere . Grazie

11 Risposte

  • Re: Errore: No print service found

    robyn78 ha scritto:


    Il tasto inserito nella jsp dovrebbe stampare nella stampante predefinita del client cosa succede qualcuno può aiutarmi a sapere . Grazie
    No, alt. Se la webapp Java gira su un server (e il client è il classico browser su un'altra macchina), se usi la Printing API di Java .... cerca di stampare su una stampante configurata nel server .... mica sul client!
  • Re: Errore: No print service found

    Grazie ma come faccio a risolvere il problema ?mi puoi dare una dritta.
  • Re: Errore: No print service found

    robyn78 ha scritto:


    Grazie ma come faccio a risolvere il problema ?
    Eh .. ma cosa vuoi fare di preciso?
  • Re: Errore: No print service found

    Ho un pulsante nella pagina jsp che quando premuto deve stampare un biglietto nella stampante predefinita del client senza aprire la finestra di dialogo questa è la servlet:
    
    if ( tipo.equals("1")) 
    	{ System.out.println("Scelta: SERVIZI POSTALI");
    		RequestDispatcher view = request.getRequestDispatcher("EliminaCodePulsanti.jsp");
    		view.forward(request, response);
    		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    		
    		String data = sdf.format(new Date());          //Variabile Data
    		LocalTime ora=java.time.LocalTime.now ();     //Variabile ora
    		String servizio= "SERVIZI POSTALI";           // Variabile Servizio
    		String messaggio="benvenuti";
    		
    		try {
    			eliminacode.Connessione.inserisciPrenotazione(data, ora, servizio);
    			//-------- STAMPA IL BIGLIETTO
    			eliminacode.Stampa stampaBiglietto =new eliminacode.Stampa();
    		     stampaBiglietto.setServizio(servizio);	
    		     stampaBiglietto.setMessaggio(messaggio);
    		     stampaBiglietto.setOra(ora.toString());
    		     eliminacode.Connessione x=new eliminacode.Connessione();
    		     int id =x.ultimoId();
    		     String id_=Integer.toString(id);
    		     stampaBiglietto.setId(id_);
    			stampaBiglietto.stampaBiglietto();
    			//------------------FINE -----------------
    		} catch (SQLException | PrinterException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    					
    	}	
    e questa e la classe stampa
    
    import java.awt.Color;
    import java.awt.Desktop;
    import java.awt.Font;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.SQLException;
    import java.time.LocalTime;
    import java.util.ArrayList;
    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 Stampa implements Printable{
    	String ora="null";
        String id="null";
        String messaggio="null";
    	String servizio="null";
        public void setOra(String ora) {
    		this.ora = ora;
    	}
    
    	public void setId(String id) {
    		this.id = id;
    	}
    
    	public void setMessaggio(String messaggio) {
    		this.messaggio = messaggio;
    	}
    
    	
    	public void setServizio(String servizio) {
    		this.servizio = servizio;
    	}
    
    	public void stampaBiglietto() throws IOException, SQLException, PrinterException
    	{
    		 PrinterJob pj = PrinterJob.getPrinterJob();
    		 //pj.printDialog();
    		// pj.setJobName("Stampa biglietto");	
    		  pj.setPrintable(this);
    		  pj.print();	
    	}
    
    	@Override
    	public int print(Graphics grap, PageFormat pageFormat, int pageIndex) throws PrinterException {
    		// TODO Auto-generated method stub
    		if(pageIndex > 0)
    		    return NO_SUCH_PAGE;
    		Font f = new Font("Helvetica", Font.BOLD, 20);
    		grap.setFont(f);
    		grap.setColor(Color.RED);
    		grap.drawString("FALZONE SRL", (int)pageFormat.getImageableX()+30,
    		   (int)pageFormat.getImageableY()+20);
    		//-------------------
    		f = new Font("Helvetica", Font.PLAIN, 10);
    		grap.setFont(f);
    		grap.setColor(Color.black);
    		grap.drawString("NUMERO ASSEGNATO", (int)pageFormat.getImageableX()+10,
    		   (int)pageFormat.getImageableY()+40);
    		grap.setColor(Color.black);
    		f = new Font("Helvetica", Font.BOLD, 70);
    		grap.setFont(f);
    		grap.setColor(Color.black);
    		grap.drawString(id, (int)pageFormat.getImageableX()+50,
    		   (int)pageFormat.getImageableY()+100);
    		
    		//-------------------
    		f = new Font("Helvetica", Font.PLAIN, 10);
    		grap.setFont(f);
    		grap.setColor(Color.black);
    		grap.drawString("SERVIZIO RICHIESTO", (int)pageFormat.getImageableX()+10,
    		   (int)pageFormat.getImageableY()+115);
    		f = new Font("Helvetica", Font.BOLD, 15);
    		grap.setFont(f);
    		grap.drawString(servizio, (int)pageFormat.getImageableX()+30,
    				   (int)pageFormat.getImageableY()+130);
    		//-------------------
    		f = new Font("Helvetica", Font.PLAIN, 10);
    		grap.setFont(f);
    		grap.setColor(Color.black);
    		grap.drawString("ORA DI ARRIVO", (int)pageFormat.getImageableX()+10,
    		   (int)pageFormat.getImageableY()+145);
    		grap.setColor(Color.black);
    		grap.drawString(ora, (int)pageFormat.getImageableX()+30,
    		   (int)pageFormat.getImageableY()+160);
    		//-------------------
    		
    		grap.setColor(Color.black);
    		grap.drawString(messaggio, (int)pageFormat.getImageableX()+10,
    		   (int)pageFormat.getImageableY()+175);
    		
    		//grap.setColor(Color.GREEN);
    		//grap.drawLine((int)pageFormat.getImageableX(), (int)pageFormat.getImageableY(), 
    		  // (int)pageFormat.getImageableWidth(), (int)pageFormat.getImageableHeight());      
    
    		return PAGE_EXISTS;
    	}
    
    }
  • Re: Errore: No print service found

    Con quella classe Stampa (che usa appunto la Printing API di Java) puoi stampare SOLO su una stampante configurata nella macchina SU CUI gira quella applicazione. Ovvero nel tuo caso il server. Con quel codice, lo ripeto, NON puoi stampare su un client se la webapp gira su un server.

    Ora .. le possibilità possono essere diverse. Bisognerebbe però capire bene se la stampa deve essere fatta in una maniera ben precisa, con posizioni/dimensioni degli elementi molto accurate, perché magari deve stampare su una carta particolare o su moduli prestampati o cose del genere.

    Puoi pensare di realizzare una pagina web che riproduca il biglietto e che sia quindi (più o meno) facilmente stampabile dall'utente? Stampare pagine web, in generale, non è una passeggiata. Bisogna lavorare bene con HTML e CSS per rendere la pagina "printer friendly". Mi capita spesso di dover stampare invoice, ricevute, report da siti web vari e sovente è un gran casino/disastro, ma principalmente perché quel tal sito non è stato fatto per avere pagine "stampabili".

    Puoi pensare di generare lato server ad esempio un PDF che l'utente può quindi scaricare da un link/pulsante e poi stampare quando/come vuole? Il fatto che l'utente si ritrovi con un PDF in mano già fatto potrebbe anche essere un aspetto positivo. A seconda di cosa rappresenta il biglietto, l'utente potrebbe voler archiviarselo per motivi suoi, e in certi casi non è una brutta cosa.

    Questi due scenari ovviamente non permettono una stampa davvero "automatica". Ma dopotutto stiamo parlando di uno scenario client-server, dove il server ovviamente non "sa" nulla di cosa ci sia (come stampanti) sul client.

    Una ulteriore alternativa, più complessa: puoi pensare di realizzare una piccola applicazione Java "desktop" che l'utente dovrà preventivamente scaricarsi dal sito. L'applicazione desktop effettua le request necessarie alla webapp per ricevere i dati e poi usa la Printing API per stampare il biglietto. Anche qui comunque non è detto che si possa fare tutto in automatico. Per lo stesso discorso di prima, solo chi usa la macchina client "sa" quali stampanti ci sono, quale è quella predefinita, ecc.. Quindi un minimo di richieste all'utente ci vuole.
  • Re: Errore: No print service found

    Grazie mille, penso di utilizzare l'ultima alternativa ossia quella di realizzare una piccola applicazione desktop, ma mi chiedevo può un'applicazione desktop fare una richiesta a una servlet dall'esterno del server (visto che il database mysql non è accessibile dall'esterno) o devo implementare json? Grazie
  • Re: Errore: No print service found

    La soluzione mediante pdf e' la migliore:

    NON DIPENDI dalla presenza di un stampante.

    1) se un naviga via tablet o cellulare?
    2) sei conforme a moltri altri siti che funzionano allo stesso modo: non stampano, ti inviano un pdf
    3) non sprechi carta
    4) fornisci un documento che l'utente puo' STAMPARE E ARCHIVIARE/puo' stampare quante volte vule SENZA dover accedere al sito
  • Re: Errore: No print service found

    Il client che dovrebbe stampare è un touch-screen dove il cliente prenota il servizio allo sportello e il PC stampa il biglietto dalla stampate termica il cliente ritira il ticket e attende il proprio turno quindi penso che la soluzione sia Quella della app sul Pc ma il mio problema è come carica sul database?
  • Re: Errore: No print service found

    robyn78 ha scritto:


    Il client che dovrebbe stampare è un touch-screen dove il cliente prenota il servizio allo sportello e il PC stampa il biglietto dalla stampate termica il cliente ritira il ticket e attende il proprio turno quindi penso che la soluzione sia Quella della app sul Pc ma il mio problema è come carica sul database?
    Ora è più chiaro il contesto. E mi sembra un contesto quindi molto "controllato".
    Se è come ho capito io, allora ciò che si vede sul touch-screen (collegato al PC di cui parli, giusto?) potrebbe essere gestito e visualizzato da una applicazione Java "desktop". Poi se si vuole fare una gestione dei dati centralizzata (perché ci sono più PC-touchscreen o per altri vari motivi), allora ci può essere una web application Java che gira su un server.
    E la webapp espone una qualche forma di web service verso i PC che fanno da "client".
  • Re: Errore: No print service found

    Si ora il mio problema è quello come fare a "collegare" l'applicazione desktop al web app. Qualche consiglio?
  • Re: Errore: No print service found

    robyn78 ha scritto:


    Si ora il mio problema è quello come fare a "collegare" l'applicazione desktop al web app. Qualche consiglio?
    web service, l'ho detto prima.
Devi accedere o registrarti per scrivere nel forum
11 risposte