Newsgroup: it.comp.java
Titolo: Come modificare un rtf?

Per prima cosa ciao a tutti!
Devo creare un report in rtf, e pensavo in principio di usare la libreria 
itext...poi ho pensato di usare una sorta di template, ovvero di un rtf dove 
rendo "individuabili" le zone dove devo scrivere i dati (tipo Nome:$NOME" ) 
per poi leggere con un bufferedsreader il file, arrivare alla stringa 
"speciale", cambiare ad es. $NOME con il nome da scrivere e scrivere le 
righe lette con un bufferewriter...il problema e' che il file di partenza e' 
composto da 10 000 "righe", mentre quello che ottengo è fisso di 7428.....ho 
provato ad aumentare la dimensione del bufferereader/writer, ma 
niente....come fare?
Vi posto il codice......
/ * INIZIO CODICE */
public static void creaReport(String[] dati) {
 /*
   Apro uno stream in lettura e uno in scrittura. I dati che leggo li scrivo 
pari pari
   nel nuovo file, fino ad arrivare ai campi da cambiare.
  */
 int rLette=0;
 int rScritte = 0;
 try {
  // Creo una istanza dello "scrivitore"
  BufferedWriter bw = new BufferedWriter(new 
FileWriter("var\\"+dati[0]+"-report.rtf") , 3000);
  // Creo una istanza del "leggitore"
  BufferedReader br = new BufferedReader(new 
FileReader("var\\prenoTEMPLATE.rtf") , 3000);
  // Per prima cosa, eseguo tutti i compiti fino alla fine dello stream
  String line; /** La riga letta*/
  while( (line = br.readLine()) != null) {
   rLette++;
   // Finchè non ho finito lo stream faccio:
   // 1) Se la riga  contiene $$$COGNOME$$$ ci metto il cognome, altrimenti 
copio tutto
   if( (line.indexOf("$$$COGNOME$$$")) != -1 ) {
    line.replaceAll("$$$COGNOME$$$", dati[0]);
    bw.write(line);
    rScritte++;
    System.out.println(line);
   }
   // Come sopra se leggo $$$NOME$$$$
   else if( (line.indexOf("$$$NOME$$$")) != -1 ) {
    line.replaceAll("$$$NOME$$$", dati[1]);
    bw.write(line);
    rScritte++;
    System.out.println(line);
   }
   // E ancora per il corso
   else if( (line.indexOf("$$$CORSO$$$")) != -1 ) {
    line.replaceAll("$$$CORSO$$$", dati[2]);
    bw.write(line);
    rScritte++;
    System.out.println(line);
   }
   else {
    bw.write(line);
    rScritte++;
    System.out.println(line);
   }
  }
 }catch(FileNotFoundException f) {
  System.out.println("File non trovat!");
  f.printStackTrace();
 }catch(IOException ioe) {
  System.out.println("Errore IOE");
  ioe.printStackTrace();
 }
 System.out.println("Righe lette:"+rLette);
 System.out.println("Righe scritte:"+rScritte);
}
public static void creaReport(String[] dati) {
 /*
   Apro uno stream in lettura e uno in scrittura. I dati che leggo li scrivo 
pari pari
   nel nuovo file, fino ad arrivare ai campi da cambiare.
  */
 int rLette=0;
 int rScritte = 0;
 try {
  // Creo una istanza dello "scrivitore"
  BufferedWriter bw = new BufferedWriter(new 
FileWriter("var\\"+dati[0]+"-report.rtf"));
  // Creo una istanza del "leggitore"
  BufferedReader br = new BufferedReader(new 
FileReader("var\\prenoTEMPLATE.rtf") );
  // Per prima cosa, eseguo tutti i compiti fino alla fine dello stream
  String line; /** La riga letta*/
  while( (line = br.readLine()) != null) {
   rLette++;
   // Finchè non ho finito lo stream faccio:
   // 1) Se la riga  contiene $$$COGNOME$$$ ci metto il cognome, altrimenti 
copio tutto
   if( (line.indexOf("$$$COGNOME$$$")) != -1 ) {
    line.replaceAll("$$$COGNOME$$$", dati[0]);
    bw.write(line);
    rScritte++;
    System.out.println(line);
   }
   // Come sopra se leggo $$$NOME$$$$
   else if( (line.indexOf("$$$NOME$$$")) != -1 ) {
    line.replaceAll("$$$NOME$$$", dati[1]);
    bw.write(line);
    rScritte++;
    System.out.println(line);
   }
   // E ancora per il corso
   else if( (line.indexOf("$$$CORSO$$$")) != -1 ) {
    line.replaceAll("$$$CORSO$$$", dati[2]);
    bw.write(line);
    rScritte++;
    System.out.println(line);
   }
   else {
    bw.write(line);
    rScritte++;
    System.out.println(line);
   }
  }
 }catch(FileNotFoundException f) {
  System.out.println("File non trovat!");
  f.printStackTrace();
 }catch(IOException ioe) {
  System.out.println("Errore IOE");
  ioe.printStackTrace();
 }
 System.out.println("Righe lette:"+rLette);
 System.out.println("Righe scritte:"+rScritte);
}

Usa Velocity: è fatto apposta per quello.

>Usa Velocity: è fatto apposta per quello.
Gli do subito un'occhiata...grazie mille!

 Gli do subito un'occhiata...grazie mille!
Troppo complesso per quello che voglio fare/tempo che voglio spenderci....
Ho trovato l'errore nel codice che usavo ( a parte i pattern che non sono 
fatti in quel modo): NON CHIUDEVO LO STREAM!!!!!!quindi word non mi apriva 
il file perchè era "lockato" o qualcosa di simile......uff! Ora va tutto ok