在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时,它会忽略文档的字体。
如何将“ 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();
}
}
答案 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);
}