2009-01-08 106 views
9

我在一個基於網絡的工具上工作,我們提供定製印刷品。如何從Java生成RTF?

目前我們使用Java構建XML結構,並將其與定製的XSL-FO一起提供給XMLmind XSL-FO Converter,然後生成RTF文檔。

這對簡單的佈局很好,但有一些問題的地方,我想要更大的控制,或者我不能做我想要的東西。 F.ex:頁眉,頁腳中的表格(例如頁碼),列,在第一頁上具有單獨的列設置或不同的頁面編號信息等。

您是否有任何人知道更好的替代方案, XMLmind還是我們從數據到RTF的方式,即Java-> XML,XML + XSL-> RTF? (我們唯一的實際限制是JVM。)

+0

Aspose.Words和iText在快速瀏覽後看起來很有前景。當我有時間的時候,我可能會測試他們兩個...... – Ingvald 2009-01-14 19:20:12

+1

最後,我們使用Aspose,使用模板,給予我們對格式和樣式的良好控制 – Ingvald 2010-07-15 14:12:59

回答

2

如果你花得起一些錢,你可以使用Aspose.Words這個專業的庫來爲Java和.NET創建Word和RTF文檔。

4

你看過iText庫嗎?它主要用作PDF生成器,儘管它可以是also generate RTF。我沒有理由親自使用它,但我得到的一般感覺是它很好,界面看起來全面而且易於在抽象中工作。它是否適合您現有的數據模型是另一個問題。

+0

感謝您的提示 - 我會研究它。 – Ingvald 2009-01-09 10:19:09

+2

做了itext停止支持rtf?在他們的主頁上我找不到任何有關RTF的信息 - 只有PDF! – 2010-07-23 07:52:57

+2

好吧,rtf被轉移到一個單獨的項目,請參閱:http://itextrtf.sourceforge.net/ – 2010-07-23 08:03:07

8

您可以查看名爲jRTF的新庫。它允許您創建新的RTF文檔並填寫RTF模板。

0
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); 
     } 
    } 
}