Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# itextsharp单元格C的中心内容#_C#_Itext - Fatal编程技术网

C# itextsharp单元格C的中心内容#

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

我正在用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”,我需要它与中心对齐,但它与左侧对齐


我以前读过这篇文章,我做过所有吃的事情,除了走一条“不同的路”,从来没有提到过。。。那么我该怎么办呢?

正如许多地方所记录的那样,文本模式(在单元格级别设置对齐方式:
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