【问题标题】:Horizontal text alignment in a PdfPCellPdfPCell 中的水平文本对齐
【发布时间】:2013-08-14 11:51:02
【问题描述】:

我正在使用此代码水平对齐。

cell = New PdfPCell();
p = New Phrase("value");
cell.AddElement(p);
cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER; //Tried with Element.Align_Center Also. Tried Adding this line before adding element also. 
table.AddCell(cell);

它不工作。

我正在创建一个包含 5 列的表,并在运行时使用上述代码在 for 循环中动态添加单元格。我希望所有单元格内容居中。

【问题讨论】:

标签: c# asp.net .net vb.net itextsharp


【解决方案1】:

试试这个,

cell = New PdfPCell();
p = New Phrase("value");
cell.AddElement(p);
cell.HorizontalAlignment = Element.ALIGN_CENTER; //Tried with Element.Align_Center Also. Tried Adding this line before adding element also. 
table.AddCell(cell);

【讨论】:

  • 它正常工作...见 cmets..我累了..现在我通过将单元格短语属性分配给新创建的短语来解决我的问题。
【解决方案2】:

我知道这是个老问题,但正确的解决方案是使用cell.HorizontalAlignment = 1;

这是一个不错的example

【讨论】:

  • 有人反对正确答案。在您的情况下,我理解,因为您使用 1 而不是 Element.ALIGN_CENTER 并且您引用了一个外部示例而没有显示更实质性的代码 sn-p,但我不明白为什么我的答案被否决,也不明白为什么不被接受。
  • 我没有看到您的评论有任何意义,您对为什么有人可能会否决我的回答的解释与问题无关。此外,我认为答案的目的是为问题提供可行的解决方案,我做到了。而且我并不真正关心我实际上试图帮助的分数或选票
【解决方案3】:

试试这个,

cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right

【讨论】:

    【解决方案4】:

    根据 cmets,正确答案(我刚刚在本地测试过)是创建一个段落元素并将对齐指令添加到段落中。

    演示这一点的工作代码块是:

            Font qFont = FontFactory.GetFont(FontFactory.HELVETICA_BOLDOBLIQUE, 10);
            List<float> widths = new List<float>();
            for(int i = 0; i < qs.Selected.Items.Count; i++) {
                widths.Add((pageRectangle.Width - 250)/ qs.Selected.Items.Count);
            }
    
            PdfPTable table = new PdfPTable(qs.Selected.Items.Count);
            table.HorizontalAlignment = Element.ALIGN_CENTER;
            table.SetTotalWidth(widths.ToArray());
    
            foreach(System.Web.UI.WebControls.ListItem answer in qs.Selected.Items) {
                cell = new PdfPCell();
                cell.Border = Rectangle.NO_BORDER;
    /******************** RELEVANT CODE STARTS HERE ***************************/
                Paragraph p = new Paragraph(answer.Text, aFont);
                p.Alignment = Element.ALIGN_CENTER;
                cell.AddElement(p);
                table.AddCell(cell);
    /******************** RELEVANT CODE  ENDS  HERE ***************************/
            }
    

    这应该归功于用户 Bruno Lowagie,但似乎发生了一些奇怪的事情,有人抱怨对正确答案投了反对票,随后又删除了相同的答案。

    如果在正确的时间在正确的地方发布了明确的答案,我会吃掉反对票。

    有些东西比网点更重要。

    【讨论】:

    • 我采用了这种方法,它奏效了。虽然每次你想声明一些东西,你都应该做RELEVANT CODE STARTS HERE
    【解决方案5】:

    我尝试了上述所有解决方案,但都没有奏效。 然后我尝试了这个,这让我找到了正确的解决方案

    PdfPCell c2 = new PdfPCell(new iTextSharp.text.Phrase("Text")) { HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER };
    table.AddCell(c2);
    

    我知道 OP 不需要它,但如果用 \n 分隔,您也可以将多个单词居中。此外,您还可以使用 Element.ALIGN_MIDDLE 垂直居中

    代码如下:

    PdfPCell c2 = new PdfPCell(new iTextSharp.text.Phrase("AAAAAAAAA\nBBBBBB")) { HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER, VerticalAlignment = iTextSharp.text.Element.ALIGN_MIDDLE };
    table.AddCell(c2);
    

    结果:

    希望对你有帮助

    【讨论】:

      【解决方案6】:

      例如,可以为所有表格单元格设置对齐方式:

      table.DefaultCell.HorizontalAlignment = Element.ALIGN_JUSTIFIED;
      

      如果某些表格单元格需要其他对齐方式,可以单独指定 -

      Phrase phraseConstant = new Phrase("Name :", font);
      PdfPCell cell = new PdfPCell(phraseConstant);
      cell.HorizontalAlignment = 0;
      table.AddCell(phraseConstant);
      

      【讨论】:

        【解决方案7】:

        终于

        改变这个:

         cell = New PdfPCell();
         p = New Phrase("value");
         cell.AddElement(p);
         cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER; 
         table.AddCell(cell);
        

        有了这个:

        PdfPCell cell = new PdfPCell(new Phrase("value"));
        cell.HorizontalAlignment = Element.ALIGN_CENTER;
        

        看起来相似但结果不同我不知道为什么

        【讨论】:

        • 用短语初始化单元格,然后设置对齐方式就可以了 +1
        猜你喜欢
        • 2012-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-21
        • 1970-01-01
        相关资源
        最近更新 更多