|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2001
Messaggi: 818
|
[Java] - Salvare il contenuto di un JTextPane in RTF
Ciao a tutti.
Nella mia applicazione (una chat) l'area contenente i messaggi e' un JTextPane. I messaggi possono contenere formattazione (colore del carattere/sfondo, font, size) ed immagini. Ho qualche problema a realizzare una funzione che salvi su file il contenuto dell'area messaggi. Ho pensato di generare un RTF e, con piacevole sorpresa, ho scoperto che il JDK standard (uso la 1.5.0) offre un supporto per tale formato. Ho quindi scritto il metodo che riporto: Codice:
private void saveDoc() { StyledDocument doc = msgTextAreaGfx.getStyledDocument(); RTFEditorKit kit = new RTFEditorKit(); try { FileOutputStream outStream = new FileOutputStream(GioChat.RTFfile); kit.write(outStream, doc, 0, doc.getLength()); outStream.close(); } catch (Exception e) { e.printStackTrace(); } Il metodo funziona abbastanza: font, colore e dimensione sono piu' o meno rispettati (qualche volta sostituisce il nero al bianco, soprattutto andando a capo, non so perche' ); il problema sono le immagini: qualunque immagine viene sostituita da un riquadro nero pari alle sue dimensioni, sia che si tratti di JPEG, BMP, GIF (animate e non). Qualcuno sa darmi qualche aiuto? Grazie in anticipo. |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
ueh collega ! ![]() non t'ha aiutato nessuno eh ![]() proviamo ad UPPARE magari qualcuno non l'aveva vista ... ciao Gio ![]() |
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Aug 2007
Messaggi: 5
|
immagini in RTF
Salve e ciao a tutti, io ho lo stesso problema, nessuno è riuscito a risolverlo?
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Per generare documenti rtf che non siano veramente minimi è forse meglio usare le librerie iText. Il supporto ad RTF offerto da Swing è veramente minimo.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7929
|
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
__________________
My gaming placement |
![]() |
![]() |
![]() |
#6 |
Junior Member
Iscritto dal: Aug 2007
Messaggi: 5
|
Salvare il contenuto di un JTextPane in RTF
E' vero è meglio utilizzare iText, ma non riesco a travare da nessuna parte, come utilizzare le librerie iText, nessuno mi da un aiuto? grazie
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Ti faccio un esempio rapidissimo.
Codice:
package rtfsample; import java.io.*; import com.lowagie.text.rtf.*; import com.lowagie.text.*; public class Main { public static void main(String[] args) throws Throwable { /** Crea il documento itext */ Document document = new Document(PageSize.A4); /** Crea il flusso di destinazione della trasformazione in rtf. */ OutputStream out = new FileOutputStream("document.rtf"); /** Crea il trasformatore che traduce le operazioni sul documento itext in formato rtf sul file "document.rtf" */ RtfWriter2 writer = RtfWriter2.getInstance(document, out); /** Inizia a scrivere sul documento. */ document.open(); /** Questo font non è il font di AWT ma di itext. */ Font font = new Font(Font.HELVETICA, 18, Font.BOLD, java.awt.Color.BLACK); /** Per aggiungere pezzi al documento itext si può usare il metodo add(Element) di Document. Paragraph è un tipo di element. */ Paragraph title = new Paragraph("Titolo", font); /** Aggiunge l'elemento paragrafo su creato al documento. Il traduttore in rtf si occupa di trasformare questo elemento in notazione rtf sul file di destinazione. */ document.add(title); /** Come per Font, anche questo non è java.awt.Image ma un Image di iText. Image è un elemento, come paragraph, e può essere inserito nel document con lo stesso metodo add di prima. */ Image image = new Jpeg(Main.class.getResource("/res/immagine.jpg")); /** Aggiunge l'immagine al documento. */ document.add(image); /** Chiude il documento. La chiusura comporta chiusura del flusso sul file. */ document.close(); } }
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#8 |
Junior Member
Iscritto dal: Aug 2007
Messaggi: 5
|
Grazie mille, ma se io invece volessi prendere direttamente il contenuto di un JtextPane e salvarlo nel file RTF? Immagini e testo(font, color) compresi.Se questo no fosse possibile, nel tuo esempio l'immagini nel file RTF è sempre allineata a sinistra, come faccio per inserirla in una determinata posizione?
Grazie |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
La conversione deve essere fatta a mano. Sfortunatamente iText non offre un meccanismo per acchiappare il contenuto di un JTextPane.
Non è particolarmente complesso da realizzare. Il JTextPane conserva le sue informazioni in uno StyledDocument. Uno StyledDocument è come un document xml: ha una radice, che contiene dei nodi, che hanno degli attributi e via dicendo. Si tratta semplicemente di attraversare un albero. Esiste tra l'altro una corrispondenza ideale tra gli elementi di uno StyledDocument e gli elementi usati da iText per i suoi document. Devi scartabellare un po' la documentazione di iText per vedere quali oggetti e metodi invocare per costruire il tuo documento. Dovrebbe esserci un "Element" Box o Cell o una cosa così, che ti permette di specificare la posizione assoluta di un contenuto. Ma vado a naso.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#10 |
Junior Member
Iscritto dal: Aug 2007
Messaggi: 5
|
A dire la verità non saprei neanche da dove partire; SWING la conosco ma iText...l'ho scoperta nemmeno un mese fa per fare in progetto.
RTF converte l'immagine in codice, se riuscissi a ricreare questo codice a metterlo in una stringa potrei inserirla in un'altra stringa e avrei la mia immagine no? Mi potresti dare qualche dritta? Sono disposto anche a pagare ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:44.