我试图添加一个自定义字体到我的pdf输出使用nuget包MVCRazorToPdf,但我在如何做到这方面有困难,因为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属性,但是在任何地方都找不到关于如何使用它的任何东西。
如果能提供任何帮助,我们将不胜感激。
发布于 2015-12-10 14:18:10
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是多么简单,以及显示如何注册字体的布鲁诺的帖子。
编辑
根据包含一个fix链接中的post (以防将来链接中断),将上面的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;"时工作。
https://stackoverflow.com/questions/34200416
复制相似问题