2017-07-28 83 views
0

我正在C#中使用itexsharp生成pdf文件的工资结算格式。itextsharp单元格的中心内容C#

但我无法控制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",我已经做了所有吃的东西,除了采取“不同的道路”,提到什么nevers ......我能做什么呢?

+0

一个为什么我们与iText的7改写iText的从无到有的原因,是这一事实,**很多开发商不阅读文档**。因此,他们不理解*文本模式*和*复合模式*之间的区别。 iText 7更加傻瓜化,这导致了问题:为什么你仍然使用iText 5而不是iText 7? –

+0

亲爱的Bruno Lowagie,它的文档是针对java,itext的,我想它是完全正确的。但正如你所看到的,我正在使用itextsharp来处理C#。我已经使用过,构建我的项目,我在各种示例中找到的代码。由于itextsharp文档相当倾斜,你能帮助我吗? –

+0

有一些简单的规则,每个自尊的C#开发人员都可以使用:当Java方法以小写开头时;使其成为大写。当Java方法以get或set开头时;删除get或set,并使用属性方法。请阅读其他答案,并运用我在其他答案中说的话。 (待续...) –

回答

1

这工作对我来说,将组成模式,因为我一直无法改变短语类的定位,如果它与段落类:

  /*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

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); 

请注意,我改变了你的代码,因为你正在创建一个Font和一个非常尴尬的方式Phrase

您创建一个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中为210.使用Phrase,复合模式没有意义。

SUMMARISED:它真的很重要你在哪个级别设置对齐方式。

  • 文本模式,您可以设置在单元的水平排列,在其内容的水平。
  • 复合模式,您在内容级别设置对齐,不是在单元级别。

就这么简单。

相关问题