【问题标题】:itext ColumnText ignores alignmentitext ColumnText 忽略对齐
【发布时间】:2013-08-09 08:15:12
【问题描述】:

我正在尝试在左侧获取一些文本行,在右侧获取一些文本行。 出于某种原因,iText 似乎完全忽略了对齐方式。

例子:

// create 200x100 column
ct = new ColumnText(writer.DirectContent);
ct.SetSimpleColumn(0, 0, 200, 100);
ct.AddElement(new Paragraph("entry1"));
ct.AddElement(new Paragraph("entry2"));
ct.AddElement(new Paragraph("entry3"));
ret = ct.Go();

ct.SetSimpleColumn(0, 0, 200, 100);
ct.Alignment = Element.ALIGN_RIGHT;
ct.AddElement(new Paragraph("entry4"));
ct.AddElement(new Paragraph("entry5"));
ct.AddElement(new Paragraph("entry6"));
ret = ct.Go();

我已将第二列的对齐方式设置为 Element.ALIGN_RIGHT,但文本显示在第一列的顶部,呈现不可读的文本。就像对齐方式仍然设置为左一样。

有什么想法吗?

【问题讨论】:

    标签: c# itextsharp itext


    【解决方案1】:

    “文本模式”“复合模式”的概念请google 或阅读my book的第3章。

    如果您在文本模式下工作,您可以在ColumnText 对象的级别定义对齐方式。换句话说,ct.Alignment = Element.ALIGN_RIGHT; 将在文本模式下工作。

    如果您在复合模式下工作,列级别的对齐将被忽略,而有利于添加到列中的元素的对齐。在您的情况下,iText 将忽略 ALIGN_RIGHT 以支持添加到列中的 Paragraph 对象的对齐方式。查看您的代码,我发现您没有为段落定义对齐方式,因此使用了默认对齐方式@9​​87654326@。

    你怎么知道你是在文本模式还是复合模式?默认情况下,ColumnText 使用 文本模式,但它会在您调用 AddElement() 方法时切换到 复合模式(删除所有先前添加的文本)。

    正如我的书第 4 章所述,文本模式复合模式也适用于PdfPCell

    【讨论】:

    • 你是对的。如果我将段落中的对齐方式设置为右侧,它会起作用。不幸的是,Paragraph 没有直接进行对齐的构造函数。如果您必须添加更多属性,代码看起来总是很乱。因此,我创建了一个名为 RightParagraph 的派生类 :)
    • 这是一个很好的解决方案。我通常创建一个元素工厂。那就是:对于每个项目,我创建一个具有静态getParagraph()getAnchor()get...() 方法的类。这样,当我需要更改整个项目的字体、对齐方式……时,我只需要将更改应用于该自定义 ElementFactory 类。
    猜你喜欢
    • 1970-01-01
    • 2019-09-02
    • 2023-03-05
    • 2014-09-17
    • 1970-01-01
    • 2019-11-10
    • 2019-04-28
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多