【问题标题】:Formatting rtf file in Java用Java格式化rtf文件
【发布时间】:2014-04-10 03:39:00
【问题描述】:

好的,我正在尝试使用Java 创建一个.rtf 文件。我不知道语法,所以我所做的是在 Mac 上使用 TextEdit 创建了一个 rtf 文件,然后用纯文本打开它以查看代码。我用它来创建我的输出方法,如下所示:

/* Creates RTF */
public String createRTF(){

    String l1 = "{\\rtf1\\ansi\\ansicpg1252\\cocoartf1265\\cocoasubrtf190 \n\n";
    String l2 = "{\\fonttbl\\f0\\fmodern\\fcharset0 Courier;} \n\n";
    String l3 = "{\\colortbl;\\red255\\green255\\blue255;} \n\n";
    String l4 = "\\margl1440\\margr1440\\vieww10800\\viewh8400\\viewkind0 \n\n";
    String l5 = "\\pard\\tx720\\tx1440\\tx2160\\tx2880\\tx3600\\tx4320\\tx5040\\tx5760\\tx6480\\tx7200\\tx7920\\tx8640\\pardirnatural \n\n";
    String l6 = "\n\n";
    String l7 = "\\f0\\fs24 \\cf0 Original Sequences:\\ \n\n";
    String l8 = "\\ \n\n";
    String l9 =  sequence1 + "\\ \n\n";
    String l10 = sequence2 + "\\ \n\n";
    String l11 = "\\ \n";
    String l12 = "Alignment:\\ \n\n";
    String l13 = "\\ \n\n";
    String l14 = s1Align + "\\ \n\n";
    String l15 = aligned + "\\ \n\n";
    String l16 = s2Align + "\\ \n\n";
    String l17 = "\\ \n\n";
    String l18 = "Score: " + score + "}";



    String rtfString = l1 + l2 + l3 + l4 + l5 + l6 + l7 + l8 + l9 + l10 + l11 + l12
            + l13 + l14 + l15 + l16 + l17 + l18;

    return rtfString;
}

我知道这有点草率,但我试图尽可能具体并分开行,因为当我在 TextEdit 中手动创建文件时,rtf 代码是:

{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf190
{\fonttbl\f0\fmodern\fcharset0 Courier;}
{\colortbl;\red255\green255\blue255;}
\margl1440\margr1440\vieww10800\viewh8400\viewkind0 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural

\f0\fs24 \cf0 Original Sequences:\
\
ACGTTGTACCA\
AGTTAAACCGTAAA\
\
Alignment:\
\
ACGTTGTACC--A--\
| |||  |||  |  \
A-GTTAAACCGTAAA\
\
Score: 3}  

我的问题是,当我使用我的程序保存文件时,这正是我的 rtf 代码的外观,但是当我使用 TextEdit 打开格式化文件时,它是一个连续的字符串,没有像我想要的那样被行分隔。有趣的是,当我自己在 TextEdit 中添加换行符然后保存它时,rtf 代码看起来完全一样。我尝试在字符串末尾添加两个/n/n,但这没有用。有没有办法完成这个输出?

【问题讨论】:

  • 如果您使用的是 windows,您可能需要将 \r 添加到您的 \n
  • 我使用的是 Mac
  • 但我也在我的 Windows 机器上尝试过,但它在任何一个上都不起作用

标签: java file-io rtf


【解决方案1】:

Rich Text Format (RTF) Version 1.5 Specification

"\\\r\n"

因此,CR + LF 后面的反斜杠将充当\par - 一个段落。

回车(字符值 13)或换行符(字符值 10) 如果字符前面有 一个反斜杠。您必须包含反斜杠;否则,RTF 忽略 控制字。 (您可能还想插入一个 至少每 255 个不带反​​斜杠的回车/换行对 字符以便更好地通过通信线路传输文本。)

【讨论】:

    【解决方案2】:

    使用\r\n 代替\n。这应该可以解决问题。

    【讨论】:

      【解决方案3】:

      使用字符串构建器对象来构建您的 rtfString ,它的 append 方法来构建字符串和新行的系统行分隔符,例如:

      StringBuilder.append(System.getProperty("line.separator"));

      【讨论】:

      • 所以我会像这样使用:sb.append(System.getProperty("line.separator")); 而不是 s = "/n"; 吗?
      • 是的,就是这样。 (sb = sb.append(System.getProperty("line.separator"));)
      • 我尝试了那个版本和我发现的另一个版本:%n,但都没有成功
      • 你应该逐行写,而不是一次写一个字符串。你能展示你的文件编写代码吗?
      • 我想通了并添加了我的答案,不过感谢您的帮助!
      【解决方案4】:

      我不想回答我自己的问题,但我确实找到了解决方案。因为我想要显示的是par,所以我需要在我的字符串末尾添加//line,以便在段落中间正确地放置一个新行。谢谢大家的帮助!

      【讨论】:

        猜你喜欢
        • 2010-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-02
        • 1970-01-01
        • 2011-01-02
        • 1970-01-01
        • 2014-04-18
        相关资源
        最近更新 更多