C# itextsharp单元格C的中心内容#
我正在用C#编写一个工资结算格式,用itexsharp生成pdf文件 但是我无法控制PdfPTable/PdfPCell单元格内容的对齐 我有以下代码:C# itextsharp单元格C的中心内容#,c#,itext,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");
/*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”,我需要它与中心对齐,但它与左侧对齐
我以前读过这篇文章,我做过所有吃的事情,除了走一条“不同的路”,从来没有提到过。。。那么我该怎么办呢?正如许多地方所记录的那样,文本模式(在单元格级别设置对齐方式:
cell2.HorizontalAlignment=PdfPCell.ALIGN_CENTER;
)和复合模式之间存在差异(在这种情况下,单元格对齐被忽略)
您使用的是复合模式,因此行cell2.HorizontalAlignment=PdfPCell.ALIGN\u居中代码>被忽略。您应该切换到文本模式,或者在短语级别设置对齐方式
文本模式和复合模式之间存在差异
无论您使用哪种编程语言。答案仍然存在
您有一个短语对象:
Font font = FontFactory.GetFont("Arial", 10, Font.BOLD);
Phrase phrase = new Phrase("H A B E R E S", font);
请注意,我更改了您的代码,因为您正在以非常笨拙的方式创建字体
和短语
创建一个单元格
,在其中添加短语
:
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中使用了一个段落
。在复合模式下使用短语
是没有意义的
总结:在哪个级别设置对齐非常重要
- 在文本模式下,可以在单元格级别设置对齐方式,而不是在其内容级别设置对齐方式
- 在复合模式下,可以在内容级别设置对齐方式,而不是在单元格级别设置对齐方式
就这么简单。正如许多地方所记录的那样,文本模式(在单元格级别设置对齐方式:cell2.HorizontalAlignment=PdfPCell.ALIGN_CENTER;
)和复合模式(在这种情况下,单元格的对齐被忽略)
您使用的是复合模式,因此行cell2.HorizontalAlignment=PdfPCell.ALIGN\u居中代码>被忽略。您应该切换到文本模式,或者在短语级别设置对齐方式
文本模式和复合模式之间存在差异
无论您使用哪种编程语言。答案仍然存在
您有一个短语对象:
Font font = FontFactory.GetFont("Arial", 10, Font.BOLD);
Phrase phrase = new Phrase("H A B E R E S", font);
请注意,我更改了您的代码,因为您正在以非常笨拙的方式创建字体
和短语
创建一个单元格
,在其中添加短语
:
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中使用了一个段落
。在复合模式下使用短语
是没有意义的
总结:在哪个级别设置对齐非常重要
- 在文本模式下,可以在单元格级别设置对齐方式,而不是在其内容级别设置对齐方式
- 在复合模式下,可以在内容级别设置对齐方式,而不是在单元格级别设置对齐方式
就这么简单。这对我来说很有效,改变了构图模式,因为我无法改变短语类的对齐方式,如果它对段落类有效的话:
/*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();
这一结果:
这对我来说很有效,因为我无法更改短语类的对齐方式,如果它与段落类一起使用的话:
/*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();
这一结果:
我们用iText 7从头开始重写iText的原因之一是,许多开发人员不阅读文档。因此,他们不理解文本模式和复合模式之间的区别。iText 7更简单,这就引出了一个问题:为什么你仍然使用iText 5而不是iText 7?亲爱的Bruno Lowagie,它的文档是针对java的,我认为它是完全正确的。但正如你所看到的,我正在与itextsharp合作开发C#。我使用了在各种示例中找到的代码来构建我的项目。因为itextsharp文档是非常偏斜的,你能帮我一下吗?每个有自尊心的C#开发者都可以使用一些简单的规则:当Java方法以小写开头时;让它成为大写字母。当Java方法以get或set开头时;删除get或set,并使用p