Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Snapdragon Soung Gen 2 è la piattaforma Qualcomm per i dispositivi audio sempre più integrati nel mondo dell'intelligenza artificiale: al prorpio interno tanta potenza elaborativa per gestire al meglio le necessità d'uso dell'agentic AI
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
In occasione del proprio Snapdragon Summit Qualcomm annuncia i due nuovi chip per dispositivi mobile di fascia alta che entreranno nel mercato nel corso del 2027: tanta potenza a disposizione per elaborazioni di intelligenza artificiale sempre più complesse
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-04-2008, 08:18   #1
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
[JAVA] Come stampare ???

Ciao a tutti,
avrei necessità di stampare (non a video, ma con la stampante connessa al pc da cui il programma viene eseguito) un array dinamico di record (con due campi: nome prodotto e prezzo), ed in più aggiungere una intestazione sulla pagina stampata. Vorrei realizzare, insomma, una specie di scontrino.
Ho cercato con google ma ho trovato solo un paio di risultati, ma di difficile comprensione

Chi sa darmi qualche dritta, magari facile facile?

Thanks
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 08:33   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
avrei necessità di stampare (non a video, ma con la stampante connessa al pc da cui il programma viene eseguito) un array dinamico di record (con due campi: nome prodotto e prezzo), ed in più aggiungere una intestazione sulla pagina stampata. Vorrei realizzare, insomma, una specie di scontrino.
Una soluzione è usare le Printing API di Java SE, vedi <qui>.
Un'altra è usare tools/librerie apposite (e più complesse) per la gestione dei report, una è JasperReports.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 09:29   #3
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
Grazie

Ma non ci ho capito niente
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 10:11   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
Ma non ci ho capito niente
Nemmeno l'esempio minimale/basilare/stupido HelloWorldPrinter.java del tutorial??
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 10:22   #5
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
Quote:
Originariamente inviato da andbin Guarda i messaggi
Nemmeno l'esempio minimale/basilare/stupido HelloWorldPrinter.java del tutorial??
Uhm ora provo... ma non ti assicuro niente
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 10:29   #6
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
Ho riportato l'esempio copincollandolo () e funge
Ma non capisco come accidenti fa a funzionare, le classi a cosa servono, i vari metodi, i cosi grafici...

Il codice copincollato è questo, a cui ho aggiunto i commenti solo alle righe di codice che sono riuscito a comprendere; i commenti in inglese, invece, sono quelli che già c'erano all'origine:

Codice:
package helloworldprinter;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.print.*;

public class HelloWorldPrinter implements Printable, ActionListener {


    public int print(Graphics g, PageFormat pf, int page) throws PrinterException {

        if (page > 0) { /* We have only one page, and 'page' is zero-based */
            return NO_SUCH_PAGE;
        }

        /* User (0,0) is typically outside the imageable area, so we must
         * translate by the X and Y values in the PageFormat to avoid clipping
         */
        Graphics2D g2d = (Graphics2D)g;
        g2d.translate(pf.getImageableX(), pf.getImageableY());

        /* Now we perform our rendering */
        // Ciò che stampa, con i margini dall'angolo della pagina:
        g.drawString("Hello world!", 100, 100);

        /* tell the caller that this page is part of the printed document */
        return PAGE_EXISTS;
    }

    public void actionPerformed(ActionEvent e) {
         PrinterJob job = PrinterJob.getPrinterJob();
         job.setPrintable(this);
         boolean ok = job.printDialog();
         if (ok) {
             try {
                  job.print();
             } catch (PrinterException ex) {
              /* The job did not successfully complete */
             }
         }
    }

    public static void main(String args[]) {
 
        //UIManager.put("swing.boldMetal", Boolean.FALSE);
        
        // Dichiarazione del frame con intestazione:
        JFrame f = new JFrame("Hello World Printer");
        
        // Oggetto ascoltatore per la chiusura del frame:
        f.addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent e) {System.exit(0);}
        });
        
        // Dichiarazione pulsante con la scritta <<Print Hello World>>:
        JButton printButton = new JButton("Print Hello World");
        
        // ???
        printButton.addActionListener(new HelloWorldPrinter());
        
        // Aggiunge al centro del frame il pulsante printButton:
        f.add("Center", printButton);
        
        // Resize del frame in modo da contenere in modo ottimale il pulsante:
        f.pack();
        
        // Rende visibile il frame:
        f.setVisible(true);
    }
}
Potresti aiutarmi a capire il resto del codice, quello senza commenti? Thanks


Cmq grazie di tutto!

Ultima modifica di PaVi90 : 14-04-2008 alle 10:43.
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 12:24   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quell'esempio è sì abbastanza semplice ma ci sono delle cose da comprendere bene.

Nel main() viene creato un JFrame in cui viene messo un pulsante. Al pulsante viene aggiunto un ActionListener che è una istanza di HelloWorldPrinter (che appunto implementa ActionListener).

Fino a qui si tratta di un normale e semplice uso di Swing.

Quando viene premuto il pulsante, viene invocato actionPerformed(). Qui inizia la parte da capire bene.

PrinterJob.getPrinterJob() serve per ottenere una istanza di PrinterJob, che è la classe principale che controlla la stampa. Inizialmente è associato al PrinterJob la stampante di default, quella predefinita.

setPrintable() serve per indicare quale è l'oggetto "stampabile". Qui viene usata una interfaccia. Alla Printing API interessa solamente sapere quale è l'oggetto che implementa l'interfaccia Printable che quindi implementa il metodo print(blabla....). È la Printing API che "chiede" all'oggetto Printable di stampare la/e pagina/e invocando di volta in volta il metodo print().

printDialog() presenta la classica finestra di selezione delle stampanti. Scegli la stampante e premi OK. Se il ritorno è true, allora hai selezionato una stampante, quindi a quel punto si invoca print().

La Printing API invoca print() di Printable in sequenza per ogni pagina (le pagine partono da 0) fino a quando print() non ritorna NO_SUCH_PAGE.

All'interno di print() hai il Graphics, hai le informazioni sul formato (PageFormat) e il numero di pagina. Quindi puoi stampare quello che vuoi sulla pagina. L'unica nota: per default l'unità di misura è in 72esimi di pollice.
Si possono naturalmente fare traslazioni, scalamenti o altro sul Graphics.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 12:42   #8
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
Non ho capito quasi nulla
E se volessi stampare semplicemente una stringa?!
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 12:58   #9
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
Non ho capito quasi nulla
E se volessi stampare semplicemente una stringa?!
Ma .... è proprio quello che fa l'esempio!!! Stampa "Hello world!" sull'unica pagina stampata.

Comunque tutto il nocciolo della questione è l'interfaccia Printable. Alla Printing API non interessa sapere dove è, cosa è o cosa fa l'oggetto Printable. Interessa solo sapere che appunto è-un Printable e quindi implementa certamente il metodo print(....).

Quando c'è bisogno di stampare la Printing API invoca il metodo print(), come se dicesse: "senti Printable, stampa la pagina 0". Se la pagina 0 esiste, tu disegni sul Graphics e ritorni PAGE_EXISTS. Poi la Printing API continua: "senti Printable, stampa la pagina 1". Se come nell'esempio la pagina 1 (la seconda) non c'è, allora fai ritornare NO_SUCH_PAGE e finisce tutto lì.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 13:00   #10
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
Quote:
Originariamente inviato da andbin Guarda i messaggi
Ma .... è proprio quello che fa l'esempio!!! Stampa "Hello world!" sull'unica pagina stampata.

Comunque tutto il nocciolo della questione è l'interfaccia Printable. Alla Printing API non interessa sapere dove è, cosa è o cosa fa l'oggetto Printable. Interessa solo sapere che appunto è-un Printable e quindi implementa certamente il metodo print(....).

Quando c'è bisogno di stampare la Printing API invoca il metodo print(), come se dicesse: "senti Printable, stampa la pagina 0". Se la pagina 0 esiste, tu disegni sul Graphics e ritorni PAGE_EXISTS. Poi la Printing API continua: "senti Printable, stampa la pagina 1". Se come nell'esempio la pagina 1 (la seconda) non c'è, allora fai ritornare NO_SUCH_PAGE e finisce tutto lì.
Ora mi è un po' più chiaro
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 14:38   #11
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
Non ci ho capito ancora quasi niente
Ho letto venti volte il tuo post ma nulla
Sarà che mi mancano le basi
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 14:49   #12
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
Non ci ho capito ancora quasi niente
Ho letto venti volte il tuo post ma nulla
Sarà che mi mancano le basi
Scusa ma .. cosa non ti è chiaro in particolare?

Tu "dai" al PrinterJob (con setPrintable()) un oggetto che implementa Printable. Quando sarà necessario stampare, verrà invocato di volta in volta il metodo print() sul tuo oggetto. Questo perché ovviamente sei tu che hai implementato il Printable che "sai" cosa/come stampare la pagina e inoltre quante pagine ci sono.
La Printing API si limita solo ad invocare print() ... "ehi Printable ... senti, stampa la pagina X".

Come concetto non mi sembra difficile.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 14:55   #13
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
Aspetta aspetta... cosa vuol dire <<dai al PrinterJob (con setPrintable()) un oggetto che implementa Printable.>> ??
Mi sono già perso

Ma non c'è un tutorial a livello di "asilo nido"?? Ho difficoltà a stare dietro al discorso...

Ultima modifica di PaVi90 : 14-04-2008 alle 14:58.
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 15:38   #14
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
Aspetta aspetta... cosa vuol dire <<dai al PrinterJob (con setPrintable()) un oggetto che implementa Printable.>> ??
Mi sono già perso
Nell'esempio fa: job.setPrintable(this);
Viene passato al PrinterJob ('job') tramite setPrintable() un reference ('this') che fa riferimento alla istanza di HelloWorldPrinter (che appunto implementa Printable).

Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
Ma non c'è un tutorial a livello di "asilo nido"??
Roba del tipo "Il manuale Java delle Giovani Marmotte" o "Primi passi in Java da 0 a 6 anni"??? No, non mi risulta.
Scusa la battuta eh ...
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 16:24   #15
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
Aspetta aspetta... cosa vuol dire <<dai al PrinterJob (con setPrintable()) un oggetto che implementa Printable.>> ??
Mi sono già perso

Ma non c'è un tutorial a livello di "asilo nido"?? Ho difficoltà a stare dietro al discorso...
Conosci il funzionamento e lo scopo di un' interfaccia?
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 17:17   #16
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
Quote:
Originariamente inviato da andbin Guarda i messaggi
Nell'esempio fa: job.setPrintable(this);
Viene passato al PrinterJob ('job') tramite setPrintable() un reference ('this') che fa riferimento alla istanza di HelloWorldPrinter (che appunto implementa Printable).

Roba del tipo "Il manuale Java delle Giovani Marmotte" o "Primi passi in Java da 0 a 6 anni"??? No, non mi risulta.
Scusa la battuta eh ...

Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
Conosci il funzionamento e lo scopo di un' interfaccia?
Parli degli eventi asincroni e quella roba lì?
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 17:31   #17
khelidan1980
Senior Member
 
L'Avatar di khelidan1980
 
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi


Parli degli eventi asincroni e quella roba lì?
mi sa che ti devi rivedere le interfacce!
__________________
Khelidan
khelidan1980 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 18:13   #18
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi


Parli degli eventi asincroni e quella roba lì?
Un' interfaccia è un contratto.....ovvero stabilisce che l'oggetto che la implementa esporterà delle funzionalità sotto forma di metodi stabilita a priori dall' interfaccia.Ad esempio l' interfaccia Comparable ha un unico metodo
public int compareTo(Object o) oppure

public int compareTo(MiaClasse mc) con l' utilizzo dei generici!

In sostanza avrai qualcosa del genere

public MiaClasse implements Comparable{
public int compareTo(Object o){
return 0;// esempio da non seguire ma che serve ad indicare il fatto che l' interfaccia garantisce che il metodo sia implementato, non che sia correttamente funzionale!
}
}

Implementare un ' interfaccia ti consente un assegnamento del tipo

Compareble c=new MiaClasse();
ed ovviamente di passare un oggetto che implementa l' interfaccia ad un metodo con questa firma

public void metodo(Comparable c){}
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 18:52   #19
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
Uhm... non ho capito moltissimo ma qualcosa ho capito
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2008, 08:07   #20
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
scusa se mi intrometto....ma conosci java???


cosa hai fatto fino ad ora, perchè a me sembra che ti manchino le basi....
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Xiaomi 18 Pro e 18 Pro Max, i nuovi flag...
ESA e Mistral hanno stretto un accordo p...
AstroForge presenta Autonomy-1: un satel...
Neutralizzata da Microsoft EvilTokens, l...
Porsche mette alla prova i Tesla Superch...
Roborock Saros 20 Flow Complete arriva i...
Basta un comando digitato nel terminale ...
La corsa alla superintelligenza è...
Le memorie cinesi sfidano sé stes...
Dash cam 4K con doppia telecamera, GPS, ...
Qwen 4: Alibaba conferma l'addestramento...
Super El Niño, allarme globale: 451.000 ...
Toyota, 400.000 robot in fabbrica senza ...
Hanno bucato l'FBI e ora dettano le cond...
Standard sì, licenze no: la linea di Ope...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:15.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v