Io li ho sempre messi in una singola sezione di detail (detail1 ad esempio)... si all'inizio non è il massimo dell'intuitività.. bisogna farci un po il callo..
Io li ho sempre messi in una singola sezione di detail (detail1 ad esempio)... si all'inizio non è il massimo dell'intuitività.. bisogna farci un po il callo..
Dunque, più o meno mi ci sto raccapezzando.
Sono arrivato al punto in cui, se provo a cliccare su preview, mi carica i dati dal database senza problemi.
Ora però ho 2 questioni:
1) La query mi tira su una serie di valori, in base ad un identificativo.
Ad esempio:
SELECT NOME, COGNOME, INDIRIZZO
FROM STUDENTI
WHERE MATRICOLA = ?;
Il problema è che la matricola viene passata dal codice java, quindi non posso "cablarla" nella query (e quindi nel file XML), visto che cambia ogni volta. Come posso fare?
La situazione è questa: sono in una JTable con lista degli studenti, con un doppio click mi si apre un JDialog che mostra i dati di quello studente. C'è un pulsante "Stampa", e in base ad una certa matricola mi deve stampare i dettagli di quello studente.
2) Nel mio caso (prendiamo per esempio sempre una tabella chiamata STUDENTI), ho un attributo di tipo BLOB, che contiene immagini (che posso tranquillamente usare con oggetti di tipo Image o BufferedImage). Come faccio a visualizzare la foto nel report?
Devi crearti praticamente un parametro $P ... leggi nelle impostazioni a sinistra ci dovrebbe già essere la lista di default dei parametri, da li dovresti poterne creare di nuovi... a questo parametro gli associ una stringa identificativa "matricola" ad esempio...
Quando poi compilerai il report da codice Java, dovrai passare al metodo per la compilazione del report, una mappa contenente i parametri con associati i relativi valori... sulla documentazione cè scritto bene come chiamare il metodo con la mappa e anche un paio di esempi... (non su html.it però!)
ammazza vedo che anche tu come me hai la buona abitudine di complicarti la vita salvandoti i files come LONGBLOB nel database...![]()
Magari esistono metodi più semplici ma non penso: leggi il file dal DB, creati un file temporaneo con un nome (anzi un path assoluto) possibilmente statico salvato comunque in qualche parametro da qualche parte... dopodichè su ireport nella palette dovrebbero esserci proprio le immagini, da li gli metti l'immagine temporanea... se te la fà scegliere con un fileChooser (e quindi non cè il file temporaneo dell'immagine), dovrai andare a metter mano direttamente al .jrxml sull'immagine e settare il pathname di quest'ultima... ovviamente il lavoro di crearsi il file temporaneo andrà fatto prima della compilazione del report.
OK, grazie!Originariamente inviato da rikytheblack
Devi crearti praticamente un parametro $P ... leggi nelle impostazioni a sinistra ci dovrebbe già essere la lista di default dei parametri, da li dovresti poterne creare di nuovi... a questo parametro gli associ una stringa identificativa "matricola" ad esempio...
Quando poi compilerai il report da codice Java, dovrai passare al metodo per la compilazione del report, una mappa contenente i parametri con associati i relativi valori... sulla documentazione cè scritto bene come chiamare il metodo con la mappa e anche un paio di esempi... (non su html.it però!)
Perfetto, il parametro funziona. Ora lo sto provando solo su iReport. Poi passerò al codice Java.
Eh lo so! Ma come le memorizzi sennò le foto nel DB?ammazza vedo che anche tu come me hai la buona abitudine di complicarti la vita salvandoti i files come LONGBLOB nel database...![]()
Oramai lascio così, visto che mi sono fatto un mazzo per capire come funzionasse!
L'immagine temporanea posso anche farla, ma ricordati che nel mio caso devo tirare su dei dati dal DB, foto compresa. Quindi fatta la query, tiro su una serie di dati, fra cui anche un blob che contiene la foto. A quel punto una volta prelevati i dati (e a questo punto non saprei bene come fare, visto che l'anagrafica la carica tramite una query memorizzata nel file XML, e in teoria dovrei poter caricare anche il BLOB in questo modo), creo un file temporaneo jpg o png che mi contiene la foto, e lo inserisco dinamicamente nel report. E anche qui, la vedo dura, specialmente senza il vostro aiuto.da li gli metti l'immagine temporanea... se te la fà scegliere con un fileChooser (e quindi non cè il file temporaneo dell'immagine), dovrai andare a metter mano direttamente al .jrxml sull'immagine e settare il pathname di quest'ultima... ovviamente il lavoro di crearsi il file temporaneo andrà fatto prima della compilazione del report.
Grazie di cuore!
EDIT: l'unica cosa che forse posso fare è caricare il dato blob, convertirlo a BYTE e passarlo al report, ma questo lo so fare in Java. Come faccio qui in iReport (o comunque usando queste librerie) a prendere il blob, convertirlo in byte e caricarlo nel report?
Come gestire il codice nei dettagli lo devi sapere tu.. però io ti consiglio di seguire una procedura di questo tipo:
- leggi il file dal db
- salvalo in un file immagine temporaneo che ha un path assoluto X/Y/z.jpg
- compila il report che nel jrxml ha un immagine che come path ha: X/Y/z.jpg
... poi ovviamente se tu devi fare "n" report con la stessa immagine, ti conviene crearti il file immagine temporaneo una volta sola e usare sempre quello... ma queste sono scelte tue in base a come hai organizzato il codice..
OK, penso che seguirò il tuo consiglio.
A proposito! Sto vedendo che servono una marea di librerie org.apache.commons.* !!!
Ogni volta che eseguo il codice, mi dice che manca qualche libreria.. Quante sono? Giusto per darmi una regolata.
tante ahimè!! e devi includerle tutte..ci sono tutte sul sito di jasperReport però !! Non è il caso che te le devi cercare una per una se no c'è da ammazarsi
Ohi, grazie! Menomale! Le cerco subito allora.
Dunque, credo di averle messe tutte le librerie.
Il problema è che quando vado ad eseguire questo pezzo di codice:
Mi compare un messaggio con scritto: "The document has no pages". Intanto non capisco perché.. Comunque poi compare la finestra della "view" dove credo che dovrebbe comparire una anteprima di stampa, e l'unico modo per chiuderla è cliccando sulla X in alto a dx, come per qualsiasi programma. Il problema è che cliccando sulla x, mi viene chiusa tutta l'applicazione (non so se è un bug).codice:JasperExportManager.exportReportToPdfFile(jp, JASPER_REPORT_DIR + "report.pdf"); JasperViewer.viewReport(jp);
L'elenco delle librerie che sto utilizzando è il seguente:
commons-beanutils-1.8.2.jar
commons-digester-2.0.jar
iText-2.1.7.jar
commons-collections-3.2.1.jar
commons-logging-1.1.1.jar
jasperreports-3.7.1.jar
Per quanto riguarda iText, non ho scaricato la versione 5 perché credo che abbiano cambiato la struttura interna del jar, perciò non trovava qualche classe.
Premetto inoltre che il mio scopo è quello di stampare il report, e non quello di generare il PDF (cosa che peraltro posso fare con una stampante pdf, i.e. cups-pdf) ma siccome sto facendo delle prove, vorrei capire perché non funzionano le cose.