it-roy-ru.com

iTextsharp, PdfPCell.VerticalAlignment и PdfPCell.Hor HorizontalAlignment

Я пытаюсь выяснить, как получить мой текст внутри PdfPCell, чтобы показать в середине. Я пробовал много разных вариантов, таких как:

 myCell.VerticalAlignment = Element.ALIGN_MIDDLE; 
 myCell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE; 
 myCell.VerticalAlignment = Rectangle.ALIGN_MIDDLE; 

Ничто из этого не работает для меня. VerticalAlignment принимает int, поэтому я попытался сделать цикл, чтобы посмотреть, смогу ли я найти правильное число, но все просто выровнять по левому нижнему краю.

   Document myDocument = new Document(PageSize.A4);

   PdfWriter myPdfWriter = PdfWriter.GetInstance(myDocument, new FileStream(strPDFFilePath, FileMode.Create));
   myDocument.Open();

   myDocument.NewPage();

   PdfContentByte myPdfContentByte = myPdfWriter.DirectContent;

   PdfPCell myCell;
   Paragraph myParagraph;

   PdfPTable myTable = new PdfPTable(4);
   myTable.WidthPercentage = 100;
   myTable.SetWidths(new int[4] { 25, 25, 25, 25 });

   myTable.DefaultCell.BorderWidth = 1;
   myTable.DefaultCell.BorderColor = BaseColor.RED;                

   for (int i = -100; i < 100; i++)
   {
       myParagraph = new Paragraph(String.Format("Alignment: {0}", i));
       myParagraph.Font.SetFamily("Verdana");
       myParagraph.Font.SetColor(72, 72, 72);
       myParagraph.Font.Size = 11;

       myCell = new PdfPCell();
       myCell.AddElement(myParagraph);
       myCell.HorizontalAlignment = i;
       myCell.VerticalAlignment = i;                    
       myTable.AddCell(myCell);
   }

   myDocument.Add(myTable);
   myDocument.Add(new Chunk(String.Empty));
   myDocument.Close();
24
Jimmy

Я думаю, что основная проблема, с которой вы столкнулись, заключается в том, что вы добавляете текст в объекты iTextSharp Paragraph, а затем пытаетесь установить выравнивание этого текста, используя объект PdfPCell, который его содержит. Я не уверен, что свойство PdfPCell.VerticalAlignment предназначено только для текста PdfPCell, или выравнивание объекта Paragraph внутри PdfPCell не имеет никакого эффекта, который вы можете увидеть в своем тесте.

Вы также устанавливаете myCell.HorizontalAlignment и myCell.VerticalAlignment в значение индекса в цикле for. Я думаю, что вы хотели использовать 1 экземпляр из i.

В любом случае, установка свойств HorizontalAlignment и VerticalAlignment в PdfPCell, тем не менее, работает. Ниже приведен небольшой метод, который демонстрирует это. Я написал это очень свободно, основываясь на том, что вы пытались сделать; если это достаточно близко к тому, что вы пытаетесь сделать, возможно, вы можете использовать это в качестве отправной точки в вашем проекте.

private void TestTableCreation() {
    using (FileStream fs = new FileStream("TableTest.pdf", FileMode.Create)) {
        Document doc = new Document(PageSize.A4);
        PdfWriter.GetInstance(doc, fs);
        doc.Open();

        PdfPTable table = new PdfPTable(4);

        for (int i = -100; i < 100; i++) {
            PdfPCell cell = new PdfPCell(new Phrase(String.Format("Alignment: {0}", i)));
            // Give our rows some height so we can see test vertical alignment.
            cell.FixedHeight = 30.0f;

            // ** Try it **
            //cell.HorizontalAlignment = Element.ALIGN_LEFT;
            //cell.HorizontalAlignment = Element.ALIGN_CENTER;
            cell.HorizontalAlignment = Element.ALIGN_RIGHT;

            cell.VerticalAlignment = Element.ALIGN_TOP;
            //cell.VerticalAlignment = Element.ALIGN_MIDDLE;
            //cell.VerticalAlignment = Element.ALIGN_BOTTOM;

            table.AddCell(cell);
        }

        doc.Add(table);
        doc.Close();
    }
}
35
Jay Riggs

Решение Jay Riggs начало работать и для вертикального выравнивания, когда я добавил:

cell.UseAscender = true;

http://www.afterlogic.com/mailbee-net/docs-itextsharp/html/0602b79e-ea9c-0c7d-c4b2-bc4b5f976f15.htm

4
Andreas Holmlund

Я попытался дать прямые целые числа и другие решения, упомянутые здесь. Но у меня ничего не получалось. Комбинация этого работала для меня в методе Composition. 

cell.HorizontalAlignment = Element.ALIGN_CENTER;
cell.VerticalAlignment = Element.ALIGN_MIDDLE;
2
Tester Account

Пожалуйста, используйте данный код, я надеюсь, что он будет наиболее полезен для тех, кто хочет напечатать текст в ячейке с выравниванием по центру и по верху Protected void Page_Load (отправитель объекта, EventArgs e) { GetTable (); }

    void gettable()
    {
        using (FileStream fs = new FileStream(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Vedic-Chart-Life-Report.pdf"), FileMode.Create, FileAccess.Write, FileShare.Read))
        {

            Document doc = new Document(PageSize.LETTER);
            PdfWriter writer = PdfWriter.GetInstance(doc, fs);
            doc.Open();
            doc.NewPage();

            BaseFont bf = BaseFont.CreateFont("C:/WINDOWS/Fonts/krdv010.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            Font f = new Font(bf, 16, Font.BOLD);

            PdfContentByte cb = writer.DirectContent;

            cb.MoveTo(0, doc.PageSize.Height - 20);
            cb.LineTo(doc.PageSize.Width, doc.PageSize.Height - 20);
            cb.Stroke();
            cb.ClosePathStroke();

            PdfPTable table = new PdfPTable(1);
            PdfPCell cell = new PdfPCell(new Phrase("eaxynks'k foospu", f));

            // Give our rows some height so we can see test vertical alignment.
            cell.FixedHeight = 15f;
            cell.HorizontalAlignment = 1;
            cell.VerticalAlignment = Element.ALIGN_TOP;

            table.AddCell(cell);
            doc.Add(table);

            //cb.RoundRectangle(10f, 550f, 592f, 200f, 20f);
            //cb.Stroke();

            //doc.Add(new Phrase("eaxynks'k foospu", f));

            doc.Close();
        }

    }
0
Deepak Maddeshiya