itextsharp单元格的中心内容C#

时间:2017-07-28 16:10:54

标签: c# itext

我正在研究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();

但它给了我这个结果:

enter image description here

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

我过去曾阅读过这篇文章"Right aligning text in PdfPCell",我已经做了所有吃过的东西,除了采取不同的道路",提到了什么?我能做些什么?那么呢?

2 个答案:

答案 0 :(得分: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();

结果:

enter image description here

答案 1 :(得分:0)

正如许多地方所述,文字模式(您在单元格级别设置对齐方式: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 的对齐方式。

就这么简单。