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);
}