在RTF上动态构建表

时间:2012-10-18 20:34:38

标签: .net rtf

我想构建动态表(未知的编译时数量的表,行,合并单元格等)

除了rtf格式之后的低级标签写法之外,还有什么好方法(可能是一些不错的dll?)用于处理rtf?

1 个答案:

答案 0 :(得分:2)

使用RTF创建表并不难,因为知道控制字是最难的部分。我在C#WPF中与他们合作过。使用RTF表的技巧是每行独立于表的其余部分。因此,第1行不知道第2行是同一个表的一部分,也不知道可见。

以下代码将为指定的行/列数创建一个表。如果要以编程方式合并单元格,则必须跟踪要合并的单元格,并且只运行一个Row Cell循环。

private String GetTableRTF(int numRows, int numColumns)
    {
        StringBuilder rtfTableString = new StringBuilder();

        // For each row, construct the rtf version of a row            
        for (int i = 0; i < numRows; i++)
        {
            // Start the row, autofits it to the page and gives it a black border by default
            rtfTableString.Append(@"{\trowd\trautofit1");
            rtfTableString.Append(@"\trbrdrt\brdrs\brdrw15\brdrcf11"); // Top border
            rtfTableString.Append(@"\trbrdrl\brdrs\brdrw15\brdrcf11"); // Left border
            rtfTableString.Append(@"\trbrdrb\brdrs\brdrw15\brdrcf11"); // Bottom border
            rtfTableString.Append(@"\trbrdrr\brdrs\brdrw15\brdrcf11"); // Right border
            rtfTableString.Append(@"\trbrdrh\brdrs\brdrw15\brdrcf11"); // Cell Horizontal border
            rtfTableString.Append(@"\trbrdrv\brdrs\brdrw15\brdrcf11"); // Cell Vertical border

            for (int z = 0; z < numColumns; z++)
            {
                // Create the cells for the table
                rtfTableString.Append(@"{\intbl \cell}");
            }
            //finish the row
            rtfTableString.Append(@"\row}");
        }

        return rtfTableString.ToString();
    }

这将为您提供一个基本表格,该表格将自动调整到窗口并具有基本的黑色边框。任何进一步的设计调整都取决于你。

相关问题