iTextsharp, PdfPCell.VerticalAlignment и PdfPCell.Hor HorizontalAlignment - PullRequest
24 голосов
/ 04 ноября 2010

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

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

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

Ответы [ 4 ]

36 голосов
/ 05 ноября 2010

Я думаю, что основная проблема, с которой вы столкнулись, заключается в том, что вы добавляете текст в объекты 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();
    }
}
4 голосов
/ 05 января 2016

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

cell.UseAscender = true;

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

2 голосов
/ 03 июля 2018

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

cell.HorizontalAlignment = Element.ALIGN_CENTER;
cell.VerticalAlignment = Element.ALIGN_MIDDLE;
0 голосов
/ 19 января 2013

Пожалуйста, используйте данный код, я надеюсь, что он будет наиболее полезен для тех, кто хочет напечатать текст в ячейке с выравниванием по середине и сверху защищенная пустота 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();
        }

    }
...