MVCRazorToPdf(iTextSharp)使用自定义字体
本文关键字:自定义 字体 iTextSharp MVCRazorToPdf | 更新日期: 2023-09-27 18:26:16
我正试图使用nuget包MVCRazorToPdf为我的pdf输出添加一个自定义字体,但我在如何做到这一点上遇到了麻烦,因为iTextSharp的文档不太好,而且似乎都过时了。
我目前创建pdf的代码是:
return new PdfActionResult(
"test.cshtml",
new TestModel(),
(writer, document) =>
{
FontFactory.Register(HostingEnvironment.MapPath("~/content/fonts/vegur-regular-webfont.ttf"), "VegurRegular");
});
其中writer
是PdfWriter
并且document
是Document
所有使用FontFactory
的示例都表明您需要使用XmlWorker
,但我无法访问,所以我想知道是否有任何方法可以使用writer
或document
更改文档字体?
我已经看到有document.HtmlStyleClass
属性,但找不到任何关于如何在任何地方使用它的信息。
如有任何帮助,将不胜感激
MVCRazorToPdf
是iTextSharp的XMLWorker
的一个非常非常简单的包装器,它使用更简单的XMLWorkerHelper
(所有默认值)来完成它的工作。如果你看看来源,你会看到这个:
document.Open();
using (var reader = new StringReader(RenderRazorView(context, viewName)))
{
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader);
document.Close();
output = workStream.ToArray();
}
如果你一意孤行地使用NuGet版本,那么你就只能使用这个实现,并且无法注册自定义字体。
然而,这方面有一个悬而未决的问题,其中包括一个修复程序,因此如果您愿意从源代码进行编译,您可以应用该更改,并且您应该做好准备。
如果你想更进一步,我建议你阅读这篇很棒的文章,它展示了用iTextSharp解析HTML是多么简单,布鲁诺在这里的文章也展示了如何注册字体。
编辑
根据中的帖子,包括一个修复链接(以防链接将来断开),将上述using
语句更改为:
using (var reader = new MemoryStream(Encoding.UTF8.GetBytes(RenderRazorView(context, viewName))))
{
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader, null, FontFactory.FontImp as IFontProvider);
document.Close();
output = workStream.ToArray();
}
然后,当使用style="font-family:VegurRegular;"
时,上面问题中注册的字体工厂将工作