我正在研究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",我已经做了所有吃过的东西,除了采取不同的道路",提到了什么?我能做些什么?那么呢?
答案 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();
结果:
答案 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);
请注意,我更改了您的代码,因为您正在以非常尴尬的方式创建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中使用了Paragraph
。在复合模式中使用Phrase
确实没有意义。
概要:在您设置路线的哪个级别上真的很重要。
就这么简单。