我正在尝试使用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及其所有默认值来完成其工作.如果您查看source,将会看到以下内容:
document.Open();
using (var reader = new StringReader(RenderRazorView(context, viewName)))
{
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader);
document.Close();
output = workStream.ToArray();
}
如果您对使用NuGet版本一无所知,那么您将被此实现所束缚,并且您将无法注册自定义字体.
但是,有一个与此有关的open issue和includes a fix,因此,如果您愿意针对compile from source,则可以应用该更改,并且您应该已经准备就绪.
如果您想更进一步,我建议您阅读this great post,该书显示了使用iTextSharp解析HTML的过程非常简单,而Bruno’s post here显示了如何注册字体的过程.
编辑
按照中的文章包括一个修复链接(以防万一该链接将来断开),请将上述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;”时,在上述问题中注册的字体工厂将起作用.
标签:itextsharp,c,mvcrazortopdf 来源: https://codeday.me/bug/20191027/1945699.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。