如何更改iTextSharp表的默认字体和颜色?

时间:2017-02-15 16:31:36

标签: c# fonts itext

有什么办法,如何更改默认表格的iTextSharp字体和单元格的颜色? 我有一张桌子,我可以在那里更换字体,但必须在每个单元格上完成 - 这是非常不幸的。很可能有一种更好的方法,但我还没有找到它。

我想要进行此更改的原因是,默认字体不支持捷克语字符。

我有以下代码:

PdfPTable subTable = new PdfPTable(4);
Font bigFont = FontFactory.GetFont("c:\\windows\\fonts\\arial.ttf", BaseFont.IDENTITY_H, 8, Font.NORMAL, BaseColor.RED);
PdfPCell subCell = new PdfPCell(new Phrase("Bělení fáze 1",bigFont));
subCell.BackgroundColor = new BaseColor(196, 231, 234);
subTable.AddCell(subCell);
subTable.AddCell("Test");

首先打印的单元格将定义font-arial以及单元格的颜色。第二个单元格将默认为全部。

我也尝试过以下命令,但这根本没有帮助:

subTable.DefaultCell.Phrase = new Phrase() { Font = bigFont };

感谢任何提示。

2 个答案:

答案 0 :(得分:0)

需要将它们拆分为使用不同Font的单独块并将它们添加到阶段,然后将它们作为单元格添加到PdfPTable中。 看这里: iTextSharp - Is it possible to set a different font color for the same cell and row?

答案 1 :(得分:0)

我遇到了同样的问题并遇到了这个老问题。 虽然 iTextSharp 已被弃用并被 iText 7 取代,但我不得不使用旧的 iTextSharp。 对于处于相同位置的任何人,这就是我的最终结果。

像最初的提问者一样,我首先尝试以这种方式实现它,在我看来 - 这将是直观的:

var table = new PdfPTable(4);  // <- use wrapper class here
table.DefaultCell.Phrase = new Phrase() { Font = myDefaultFont };

这显然不起作用。但是您可以通过为 PdfPTable 编写包装类并像这样覆盖它的 AddCell(string text) 来使其工作

public class MyPdfTable : PdfPTable
{
    public new void AddCell(string text)
    {
        Phrase defaultPhrase = DefaultCell.Phrase;
        Phrase phrase = defaultPhrase == null ? new Phrase(text) : new Phrase(text, defaultPhrase.Font);
        base.AddCell(phrase);

        // for some reason iTextSharp sets this to null after AddCell() is called, so we restore it
        DefaultCell.Phrase = defaultPhrase;
    }

也可以将其实现为 PdfPTable 的扩展方法,但由于我使用的是遗留代码,因此我最终采用了上述解决方案。 这样,我唯一需要更改的是更新表时的类型,而不是每次调用 AddCell()

希望对大家有所帮助。