iTextSharp:对齐图像和文本

时间:2013-06-13 09:34:32

标签: image alignment itextsharp

我使用iTextSharp导出PDF格式的报告。报告的标题应具有以下格式: enter image description here

问题是将报告标题与页面中心对齐,而页面左侧有一个图像。当我使用表格时,报表标题按其单元格的中心对齐,而不是按页面中心对齐。有更好的方法吗?

修改 添加标题的代码如下:

var doc = new Document(pageSize, margins.Width, margins.Width, margins.Height, margins.Height);
using (PdfWriter.GetInstance(doc, destination))
{
    doc.Open();
    var headerTable = new PdfPTable(1){ WidthPercentage = 100 };
    RenderHeader(headerTable); // adds several lines to headerTable
    doc.Add(headerTable);
}

1 个答案:

答案 0 :(得分:0)

你真的需要PdfPTable吗?

为什么不添加Paragraph包含右对齐的数据,然后添加几个居中的Paragraph

然后将图像添加到绝对位置,例如:

Image img = Image.GetInstance(path_to_image);
img.SetAbsolutePosition(36, PdfWriter.getVerticalPosition(true));
document.Add(Image);

另一种选择是在表或单元格事件中添加Image,而不是将其直接添加到表中。假设您的PdfPTable由一行和一列组成,那么您可以定义一个像这样的单元格事件:

public class ImageCell : IPdfPCellEvent {
    public void CellLayout(
        PdfPCell cell, Rectangle position, PdfContentByte[] canvases
    ) {
        float x1 = position.Left + 2;
        float y1 = position.Top - 2;
        float y2 = position.Bottom + 2;
        PdfContentByte canvas = canvases[PdfPTable.LINECANVAS];
        Image img = Image.GetInstance(path_to_image);
        img.scaleToFit(10000, y1 - y2);
        img.SetAbsolutePosition(x1, y2);
        canvas.AddImage(img);
    }
}

假设该单元格是带有日期和标题的PdfPCell,那么您可以这样做:

cell.CellEvent = new ImageCell();

请注意,在这种情况下,图像将缩放到单元格的高度。

请原谅我,如果代码不能立即编译,我是在写这个(基于经验),我没有测试实际的代码。