【问题标题】:Center content of a itextsharp cell C#itextsharp单元格C#的中心内容
【发布时间】:2018-01-04 19:01:39
【问题描述】:

我正在用 C# 编写工资结算格式,用 itexsharp 生成 pdf 文件。

但我无法控制 PdfPTable / PdfPCell 单元格内容的对齐方式。

我有这个代码:

        /*datos del LA LIQUIDACIÓN*/
        //1° linea
        phrase.Font = new Font(FontFactory.GetFont("Arial", 10, Font.BOLD));
        phrase.Add("H A B E R E S");
        PdfPCell cell2 = new PdfPCell();
        cell2.Border = Rectangle.NO_BORDER;
        cell2.PaddingTop = -7;
        cell2.AddElement(phrase);
        cell2.Colspan = 3;
        cell2.HorizontalAlignment = PdfPCell.ALIGN_CENTER;
        table2.AddCell(cell2);                
        phrase.Clear();

但它给了我这个结果:

单元格的内容,例如文本“HABERES”,我需要它与中心对齐,但它与左侧对齐。

以前看过"Right aligning text in PdfPCell"这个帖子,吃过的都做了,除了走“不一样的路”,什么都没有提到……那我该怎么办呢?

【问题讨论】:

  • 我们使用 iText 7 从头重写 iText 的原因之一是,许多开发人员不阅读文档。结果,他们不明白文本模式复合模式之间的区别。 iText 7 更简单,这就引出了一个问题:为什么你还在使用 iText 5 而不是 iText 7?
  • 亲爱的 Bruno Lowagie,它的文档是针对 java、itext 的,我想它是完全正确的。但正如您所见,我正在使用 itextsharp 开发 C#。我使用在各种示例中找到的代码来构建我的项目。因为 itextsharp 的文档很不准确,你能帮我解决这个问题吗?
  • 每个自尊的 C# 开发人员都可以使用一些简单的规则:Java 方法以小写开头;使它成为大写。当 Java 方法以 get 或 set 开头时;删除 get 或 set,并使用属性方法。请阅读其他答案,并应用我在其他答案中所说的话。 (待续……)
  • 另一个答案是关于文本模式(在单元格级别设置对齐方式:cell2.HorizontalAlignment = PdfPCell.ALIGN_CENTER;)和复合模式之间的区别(在这种情况下,单元格的对齐将被忽略)。您正在使用复合模式,因此cell2.HorizontalAlignment = PdfPCell.ALIGN_CENTER; 行被忽略。您应该切换到文本模式,或者在phrase 级别设置对齐方式。你对这个答案有什么不明白的地方吗?
  • 谢谢!我已经更改了文本模式,因为我无法更改 Phrase 类的对齐方式,如果它与 Paragraph 类一起使用的话。我会发布答案,请投票。再次非常感谢你..

标签: c# itext


【解决方案1】:

这对我有用,改变了组合模式,因为我无法改变 Phrase 类的对齐方式,如果它与 Paragraph 类一起使用的话。:

            /*datos del LA LIQUIDACIÓN*/
            //1° linea
            paragraph.Clear();
            paragraph.Font = new Font(FontFactory.GetFont("Arial", 10, Font.BOLD));
            paragraph.Alignment = Element.ALIGN_CENTER;//here is the change
            paragraph.Add("H A B E R E S");
            PdfPCell cell2 = new PdfPCell();
            cell2.Border = Rectangle.NO_BORDER;
            cell2.PaddingTop = -7;
            cell2.AddElement(paragraph);
            cell2.Colspan = 3;
            table2.AddCell(cell2);
            paragraph.Clear();

这个结果:

【讨论】:

    【解决方案2】:

    正如许多地方所记录的那样,文本模式(在单元格级别设置对齐方式:cell2.HorizontalAlignment = PdfPCell.ALIGN_CENTER;)和复合模式(在在这种情况下,单元格的对齐将被忽略)。

    您正在使用复合模式,因此cell2.HorizontalAlignment = PdfPCell.ALIGN_CENTER; 行被忽略。您应该切换到文本模式,或者在短语级别设置对齐方式。

    存在文本模式复合模式的区别 无论您使用哪种编程语言。答案仍然存在。

    你有一个Phrase 对象:

    Font font = FontFactory.GetFont("Arial", 10, Font.BOLD);
    Phrase phrase = new Phrase("H A B E R E S", font);
    

    请注意,我更改了您的代码,因为您正在以一种非常尴尬的方式创建 FontPhrase

    您创建一个Cell,并在其中添加Phrase

        PdfPCell cell2 = new PdfPCell();
        cell2.AddElement(phrase);
        table2.addCell(cell2);
    

    当您使用AddElement() 方法时,您正在复合模式下工作。这也很尴尬,因为没有理由需要复合模式。

    如文档所述,以下行被忽略:

     cell2.HorizontalAlignment = PdfPCell.ALIGN_CENTER;
    

    该行仅适用于文本模式。

    要解决此问题,您有两种选择:

    选项#1:进入文本模式

    Font font = FontFactory.GetFont("Arial", 10, Font.BOLD);
    Phrase phrase = new Phrase("H A B E R E S", font);
    PdfPCell cell2 = new PdfPCell(phrase);
    cell2.HorizontalAlignment = PdfPCell.ALIGN_CENTER;
    table2.addCell(cell2);
    

    选项#2:在元素级别而不是单元格级别设置对齐方式

    Font font = FontFactory.GetFont("Arial", 10, Font.BOLD);
    Paragraph p = new Paragraph("H A B E R E S", font);
    p.Alignment = Element.ALIGN_CENTER;
    PdfPCell cell2 = new PdfPCell();
    cell2.AddElement(p);
    table2.addCell(cell2);
    

    请注意,我在选项 2 中使用了 Paragraph。在 复合模式 中使用 Phrase 并没有什么意义。

    总结:在哪个级别设置对齐真的很重要。

    • 文本模式中,您在单元格级别设置对齐方式,NOT在其内容级别设置。
    • 复合模式中,您在内容级别设置对齐方式,NOT在单元格级别。

    就这么简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 2016-06-20
      相关资源
      最近更新 更多