iText7 - 使用 HtmlConverter 时如何防止字体变化?
iText7 - How do you prevent the font face from changing when using HtmlConverter?
在 C# 中,我尝试传入一个简单的 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,但单词 "link" 的字体呈现方式与 Helvetica 不同。似乎在呈现 HTML 时,它忽略了文档的字体。
Sample Screenshot
如何让"link"的字体变成Helvetica并使用例2的方法?我想我在这里遗漏了一些小东西。我是否需要定义 CSS class 因为我们在 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();
}
}
pdfHTML
中的默认字体系列是 Times
,您只为顶级元素覆盖它,而(几乎)所有嵌套级别的所有元素都有其字体系列在 ConvertToElements
调用后明确指定。要更改字体系列,最简单的解决方案确实是将一些 CSS 应用到您的初始 HTML。您可以直接在 style
声明中设置 font-family
:
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);
}
在 C# 中,我尝试传入一个简单的 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,但单词 "link" 的字体呈现方式与 Helvetica 不同。似乎在呈现 HTML 时,它忽略了文档的字体。
Sample Screenshot
如何让"link"的字体变成Helvetica并使用例2的方法?我想我在这里遗漏了一些小东西。我是否需要定义 CSS class 因为我们在 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();
}
}
pdfHTML
中的默认字体系列是 Times
,您只为顶级元素覆盖它,而(几乎)所有嵌套级别的所有元素都有其字体系列在 ConvertToElements
调用后明确指定。要更改字体系列,最简单的解决方案确实是将一些 CSS 应用到您的初始 HTML。您可以直接在 style
声明中设置 font-family
:
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);
}