iText7 - Как предотвратить изменение начертания шрифта при использовании HtmlConverter?

В С # я ​​пытаюсь передать простую строку HTML, проанализировать строку и добавить в документ PDF. В приведенных ниже примерах я добавляю строку в абзац iText7.

Я прочитал эту статью и смог написать приведенный ниже код.

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

Первый абзац (p1), Пример 1, отображает правильный шрифт Helvetica. Конечно, я использую метод SetAction, который совершенно не похож на статью. Это только для демонстрационных целей.

Второй абзац (p2), Пример 2, отлично конвертирует HTML, но шрифт для слова "ссылка" отображается иначе, чем Helvetica. Кажется, что когда HTML отображается, он игнорирует шрифт документа.

Образец снимка экрана

Как я могу сделать шрифт "link" шрифтом Helvetica и использовать подход из примера 2? Думаю, мне здесь не хватает чего-то незначительного. Нужно ли мне определять класс CSS, раз уж мы находимся в стране HTML?

Спасибо за любые предложения.

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 ответ

Решение

Семейство шрифтов по умолчанию в 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);
}
Другие вопросы по тегам