我有一个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中吗?
答案 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
对象。
至于PdfPCell
和ColumnText
中的内容之间的差异,您可能需要阅读这些问题的答案:
PdfPCell
的内容实际存储在ColumnText
对象中,但PdfPCell
可能有填充。
还有文字模式与复合模式。你在谈论两条线之间的距离。在文字模式中,此距离使用PdfPCell
方法在ColumnText
/ setLeading()
的级别定义。在复合模式中,将忽略此参数。相反,会使用添加到PdfPCell
/ ColumnText
的元素的前导。
例如:如果p1
,p2
和p3
是三个Paragraph
个对象,每个对象具有不同的前导,那么{{1如果你这样做,将会有三个不同引导的文本:
ct