简体   繁体   中英

How do I generate RTF from Java?

I work on a web-based tool where we offer customized prints.

Currently we build an XML structure with Java, feed it to the XMLmind XSL-FO Converter along with customized XSL-FO, which then produces an RTF document.

This works fine on simple layouts, but there's some problem areas where I'd like greater control, or where I can't do what I want at all. F.ex: tables in header, footers (eg, page numbers), columns, having a separate column setup or different page number info on the first page, etc.

Do any of you know of better alternatives, either to XMLmind or to the way we get from data to RTF, ie, Java-> XML, XML+XSL-> RTF? (The only practical limitation for us is the JVM.)

You can take a look at a new library called jRTF . It allows you to create new RTF documents and to fill RTF templates.

Have you had a look at the iText library? It's touted primarily as a PDF generator, though it can also generate RTF . I haven't had cause to use it personally, but the general feeling I get is that it's good, and the interface looks comprehensive and easy to work to in the abstract. Whether it would fit in well with your existing data model is another question.

如果你能负担得起花钱,你可以使用Aspose.Words ,这是一个专业的库,用于为Java和.NET创建Word和RTF文档。

iText支持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);
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM