iText7-使用HtmlConverter时如何防止字体变化?

时间:2019-11-25 23:43:13

标签: itext7 pdfhtml

在C#中,我试图传递一个简单的HTML字符串,并将该字符串解析并添加到PDF文档中。在下面的示例中,我将字符串添加到iText7段落中。

我阅读了这篇文章,并设法编写了以下代码。

https://itextpdf.com/en/resources/books/itext-7-converting-html-pdf-pdfhtml/chapter-1-hello-html-pdf

示例1,第一个段落(p1)呈现正确的字体Helvetica。当然,我使用的是SetAction方法,该方法与本文完全不同。这仅是出于演示目的。

示例2,第二段(p2)可以很好地转换HTML,但是“ link”一词的字体呈现方式与Helvetica不同。似乎在呈现HTML时,它会忽略文档的字体。

Sample Screenshot

如何将“ link”的字体设置为Helvetica并使用示例2中的方法?我想我在这里错过了一些小事。因为我们在HTML领域,所以我需要定义CSS类吗?

谢谢您的任何建议。

class Program
{
    static void Main(string[] args)
    {
        var pdfWriter = new PdfWriter(@"c:\temp\test.pdf");
        var pdfDocument = new PdfDocument(pdfWriter);
        var document = new Document(pdfDocument);

        // Example 1
        var p1 = new Paragraph("p1: this is a test url")
            .SetFont(PdfFontFactory.CreateFont(StandardFonts.HELVETICA))
            .SetFontSize(12f)
            .SetFontColor(new DeviceCmyk(1f, .31f, 0, 0))
            .SetFixedPosition(35, 600, UnitValue.CreatePercentValue(100f))
            .SetAction(PdfAction.CreateURI("www.google.com"));

        document.Add(p1);

        // Example 2
        var html = @"p2: this is a <a href=""www.google.com"">test</a> url";
        var elements = HtmlConverter.ConvertToElements(html);

        var p2 = new Paragraph()
            .SetFont(PdfFontFactory.CreateFont(StandardFonts.HELVETICA))
            .SetFontSize(12f)
            .SetFontColor(new DeviceCmyk(1f, .31f, 0, 0))
            .SetFixedPosition(35, 550, UnitValue.CreatePercentValue(100f));

        foreach (var element in elements)
        {
            p2.Add((IBlockElement)element);
        }

        document.Add(p2);

        document.Close();
        pdfDocument.Close();
        pdfWriter.Close();
    }
}

1 个答案:

答案 0 :(得分:0)

pdfHTML中的默认字体系列为Times,并且您仅对顶级元素覆盖它,而(几乎)所有嵌套级别的所有元素都明确指定了其字体系列在ConvertToElements调用之后。要更改字体系列,最简单的解决方案确实是将一些CSS应用于初始HTML。您可以直接在font-family声明中设置style

var html = @"<p style=""font-family: Helvetica"">p2: this is a <a href=""www.google.com"">test</a> url</p>";

然后,您甚至不必为段落设置字体,并且段落创建代码简化为

var p2 = new Paragraph()
    .SetFontSize(12f)
    .SetFontColor(new DeviceCmyk(1f, .31f, 0, 0))
    .SetFixedPosition(35, 550, UnitValue.CreatePercentValue(100f));

foreach (var element in elements)
{
    p2.Add((IBlockElement)element);
}