¿Cómo puedo generar RTF desde Java?
xml xslt (5)
¿Has echado un vistazo a la biblioteca iText ? Se promociona principalmente como un generador de PDF, aunque también puede generar RTF . No he tenido motivos para usarlo personalmente, pero la sensación general es que es bueno, y la interfaz parece completa y fácil de trabajar en abstracto. Si esto encajaría bien con su modelo de datos existente es otra pregunta.
Trabajo en una herramienta basada en web donde ofrecemos impresiones personalizadas.
Actualmente construimos una estructura XML con Java, la alimentamos al XMLmind XSL-FO Converter junto con XSL-FO personalizado, que luego produce un documento RTF.
Esto funciona bien en diseños simples, pero hay algunas áreas problemáticas en las que me gustaría un mayor control, o donde no puedo hacer lo que quiero en absoluto. F.ex: tablas en encabezado, pies de página (por ejemplo, números de página), columnas, con una configuración de columna separada o información de número de página diferente en la primera página, etc.
¿Alguno de ustedes conoce mejores alternativas, ya sea a XMLmind o a la forma en que obtenemos datos a RTF, es decir, Java-> XML, XML + XSL-> RTF? (La única limitación práctica para nosotros es la JVM).
Si pudiera permitirse gastar algo de dinero, podría usar Aspose.Words , una biblioteca profesional para crear documentos Word y RTF para Java y .NET.
iText es compatible con 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);
}
}
}
Puede echarle un vistazo a una nueva biblioteca llamada jRTF . Le permite crear nuevos documentos RTF y rellenar plantillas RTF.