Unable to vertically align text in table cell with itextsharp

随声附和 提交于 2019-12-01 17:44:43

You have a complex example that appears to be using nested tables and extension methods. As Alexis pointed out, the VerticalAlignment is the correct property to use. Below is a full working example of this. I recommend getting rid of your extension method for now and just starting with this example.

//Our test file to output
var testFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.pdf");

//Standard PDF setup, nothing special here
using (var fs = new FileStream(testFile, FileMode.Create, FileAccess.Write, FileShare.None)) {
    using (var doc = new Document()) {
        using (var writer = PdfWriter.GetInstance(doc, fs)) {
            doc.Open();

            //Create our outer table with two columns
            var outerTable = new PdfPTable(2);

            //Create our inner table with just a single column
            var innerTable = new PdfPTable(1);

            //Add a middle-align cell to the new table
            var innerTableCell = new PdfPCell(new Phrase("Inner"));
            innerTableCell.VerticalAlignment = Element.ALIGN_MIDDLE;
            innerTable.AddCell(innerTableCell);

            //Add the inner table to the outer table
            outerTable.AddCell(innerTable);

            //Create and add a vertically longer second cell to the outer table
            var outerTableCell = new PdfPCell(new Phrase("Hello\nWorld\nHello\nWorld"));
            outerTable.AddCell(outerTableCell);

            //Add the table to the document
            doc.Add(outerTable);

            doc.Close();
        }
    }
}

This code produces this PDF:

Use

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

Also, you can set a default vertical alignment for all cells by setting

kitosKalbosTable.DefaultCell.VerticalAlignment

It seems Element.ALIGN_MIDDLE only works, when the cell height is large i.r.t the text height. In a PDF, margins for text in cells are large by default, see iText developers

You could append a \n and a space to your string to solve this, but the cell height will become much larger.

For normal text, one way to lift text in a chunk a few pixels is:

 myChunk.SetTextRise(value);

Only drawback: when the text is underlined (like a link) it only raises the text ! not the underline..

The following seems to work for underlined text also,

 myCell.PaddingBottom = value;

The idea was to put a link in a table cell.. blue font, underlined, vertical centering. My code now:

 iTextSharp.text.Font linksFont =
    FontFactory.GetFont(FontFactory.HELVETICA, 
             10, Font.UNDERLINE, BaseColor.BLUE);
 PdfPTable myTable = new PdfPTable(1);                   
 Chunk pt = new Chunk("Go Google Dutch", linksFont);
 pt.SetAnchor(new Uri("https://www.google.nl"));
 Phrase ph1 = new Phrase(pt);
 PdfPCell cellP = new PdfPCell();
 cellP.PaddingBottom = linksFont.CalculatedSize/2;
 cellP.AddElement(ph1);
 myTable.AddCell(cellP);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!