iText(夏普) - 使用单元格事件直接绘制时文本不同

时间:2015-09-23 20:49:31

标签: itextsharp itext

我有一个PdfPTable,我正在绘制简单的文字:

BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
Font f2 = new Font(bf, 10.0f);
PdfPTable tab = new PdfPTable(2);
table.AddCell(new PdfPCell(new Phrase("Dude", f2)));

这一切都很好,花花公子。但是为了做一些fancier stuff,我试图让细胞事件发挥作用:

Font f2 = new Font(bf, 10.0f);   // Pretend this is a global
class CellEvent : IPdfPCellEvent
{
    void IPdfPCellEvent.CellLayout(PdfPCell cell, Rectangle r, PdfContentByte[] canvases)
    {
        ColumnText ct = new ColumnText(canvases[0]);
        ct.SetSimpleColumn(r);
        ct.AddElement(new PdfPCell(new Phrase("Dude", f2)));
        ct.Go();
    }
}
BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
PdfPTable tab = new PdfPTable(2);
PdfPCell ce = new PdfPCell();
ce.CellEvent = new CellEvent();
table.AddCell(ce);

当我这样做时,细胞的绘制方式完全不同。我的实际文本是多行长,当直接绘制(直接将短语添加到单元格)时,文本行在垂直方向上非常接近;当通过单元格事件绘制时,文本行之间有很多空格,它不适合PdfPTable为我提供的框。

在IPdfPCellEvent.CellLayout()中绘制文本是否有不同的更优选方法?或者我只需要将一些格式参数从PdfPCell复制到ColumnText中吗?

1 个答案:

答案 0 :(得分:1)

此代码段存在一些问题:

ColumnText ct = new ColumnText(canvases[0]);
ct.SetSimpleColumn(r);
ct.AddElement(new PdfPCell(new Phrase("Dude", f2)));
ct.Go();

更具体地说:

ct.AddElement(new PdfPCell(new Phrase("Dude", f2)));

您不能在PdfPCell的上下文之外使用PdfPTable对象。

至于PdfPCellColumnText中的内容之间的差异,您可能需要阅读这些问题的答案:

PdfPCell的内容实际存储在ColumnText对象中,但PdfPCell可能有填充。

还有文字模式复合模式。你在谈论两条线之间的距离。在文字模式中,此距离使用PdfPCell方法在ColumnText / setLeading()的级别定义。在复合模式中,将忽略此参数。相反,会使用添加到PdfPCell / ColumnText的元素的前导。

例如:如果p1p2p3是三个Paragraph个对象,每个对象具有不同的前导,那么{{1如果你这样做,将会有三个不同引导的文本:

ct