我使用 iTextSharp 创建的 pdf 中未使用 DefaultCell 属性

DefaultCell properties are not used in my pdf created with iTextSharp

我使用 iTextSharp v5.5.6

我正在创建一个大 table。 为了在我的布局中保持一致,我想使用 DefaultCell class 来设置一些默认设置,如字体、填充和对齐方式。 我没有做正确的事情,因为设置没有应用到我的单元格。

这是一些代码:

var table = new PdfPTable(2) 
  { KeepTogether = true, TotalWidth = printWidth, LockedWidth = true,
    HorizontalAlignment = 0, SpacingBefore = 0, SpacingAfter = 15f };
// Set default values:
table.DefaultCell.Colspan = 1;
table.DefaultCell.HorizontalAlignment = Element.ALIGN_LEFT;
table.DefaultCell.Padding = 5f;
table.DefaultCell.PaddingLeft = 5f;
table.DefaultCell.PaddingBottom = 5f;
table.DefaultCell.VerticalAlignment = Element.ALIGN_BOTTOM;
table.DefaultCell.BorderWidthBottom = 0f;
table.DefaultCell.Phrase = new Phrase { Font = Blue11BoldFont };
table.DefaultCell.Border = Rectangle.NO_BORDER; 

table.AddCell(new PdfPCell(new Phrase("Foo")) 
  { HorizontalAlignment = Element.ALIGN_CENTER, MinimumHeight = 20f });
table.AddCell(new PdfPCell(new Phrase("Bar", Black10BoldFont)) 
  { Colspan = 4, HorizontalAlignment = Element.ALIGN_CENTER });

我原以为我的第一个单元格会使用我的蓝色字体并应用填充。 但是没有任何应用。事实上,当我删除 DefaultCell 行时,我得到了相同的结果。

我已经搜索了几个小时,我发现的大多数样本都使用类似的东西。 非常感谢任何建议。

您正在自己创建 PdfPCell 个对象。在这种情况下,默认单元格 总是 被忽略。

What is the PdfPTable.DefaultCell property used for?

创建 PdfPTable 时,您添加单元格。

  • 一种方法是创建一个 PdfPCell 对象并使用 addCell() 方法添加该单元格。在这种情况下,您有责任定义每个单独单元格的属性。
  • 另一种方法是使用快捷方式:您不创建 PdfPCell,而是将 StringPhrase 添加到 table使用 addCell() 方法。在这种情况下,PdfPCell 是使用 默认属性 在内部 创建的 。您可以通过更改默认单元格的属性来更改默认属性。默认单元格是使用getDefaultCell()方法获取的。

这不是错误,这是设计使然。您误解了 "default cell" 概念的含义。请注意,免费电子书 The Best iText Questions on Whosebug.

中解释了这个概念

如果您想在布局中保持一致,最好的方法是创建您自己的 createCell() 方法,该方法创建一个 PdfPCell,您可以将所有属性应用到该 PdfPCell您使用的是默认单元格。