Come posso generare RTF da Java?
Domanda
Lavoro su uno strumento basato sul web in cui offriamo stampe personalizzate.
Attualmente costruiamo una struttura XML con Java, la inviamo al XMLmind XSL-FO Converter lungo con XSL-FO personalizzato, che quindi produce un documento RTF.
Funziona bene su layout semplici, ma ci sono alcune aree problematiche in cui mi piacerebbe un maggiore controllo o dove non posso fare quello che voglio. F.ex: tabelle nell'intestazione, piè di pagina (ad es. Numeri di pagina), colonne, con un'impostazione di colonna separata o informazioni sul numero di pagina diverse nella prima pagina, ecc.
Qualcuno di voi conosce alternative migliori, a XMLmind o al modo in cui passiamo dai dati a RTF, ovvero Java- > XML, XML + XSL- > RTF? (L'unica limitazione pratica per noi è la JVM.)
Soluzione
Se potessi permetterti di spendere del denaro, potresti usare Aspose.Words , una libreria professionale per la creazione di documenti Word e RTF per Java e .NET.
Altri suggerimenti
Puoi dare un'occhiata a una nuova libreria chiamata jRTF . Ti consente di creare nuovi documenti RTF e di compilare modelli RTF.
Hai dato un'occhiata alla iText ? È pubblicizzato principalmente come generatore di PDF, sebbene possa generare anche RTF . Non ho avuto motivo di usarlo personalmente, ma la sensazione generale che ho è che sia buona e l'interfaccia sembra completa e facile da lavorare in astratto. Se si adatterebbe bene con il modello di dati esistente è un'altra domanda.
iText supporta RTF.
import com.lowagie.text.*;
import com.lowagie.text.html.simpleparser.HTMLWorker;
import com.lowagie.text.html.simpleparser.StyleSheet;
import com.lowagie.text.rtf.*;
import java.io.*;
import java.util.ArrayList;
public class HTMLtoRTF {
public static void main(String[] args) throws DocumentException {
Document document = new Document();
try {
Reader htmlreader = new BufferedReader((new InputStreamReader((new FileInputStream("C:\\Users\\asrikantan\\Desktop\\sample.htm")))));
RtfWriter2 rtfWriter = RtfWriter2.getInstance(document, new FileOutputStream(("C:\\Users\\asrikantan\\Desktop\\sample12.rtf")));
document.open();
document.add(new Paragraph("Testing simple paragraph addition."));
//ByteArrayOutputStream out = new ByteArrayOutputStream();
StyleSheet styles = new StyleSheet();
styles.loadTagStyle("body", "font", "Bitstream Vera Sans");
ArrayList htmlParser = HTMLWorker.parseToList(htmlreader, styles);
//fetch HTML line by line
for (int htmlDatacntr = 0; htmlDatacntr < htmlParser.size(); htmlDatacntr++) {
Element htmlDataElement = (Element) htmlParser.get(htmlDatacntr);
document.add((htmlDataElement));
}
htmlreader.close();
document.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
System.out.println(e);
}
}
}