首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVCRazorToPdf (iTextSharp)使用自定义字体

MVCRazorToPdf (iTextSharp)使用自定义字体
EN

Stack Overflow用户
提问于 2015-12-10 11:11:25
回答 1查看 2.4K关注 0票数 3

我试图添加一个自定义字体到我的pdf输出使用nuget包MVCRazorToPdf,但我在如何做到这方面有困难,因为iTextSharp的文档不是很好,所有似乎都过时了。

我目前用于创建pdf的代码是:

代码语言:javascript
复制
return new PdfActionResult(
    "test.cshtml", 
    new TestModel(),
    (writer, document) =>
    {
        FontFactory.Register(HostingEnvironment.MapPath("~/content/fonts/vegur-regular-webfont.ttf"), "VegurRegular");
    });

其中writerPdfWriterdocumentDocument

使用FontFactory的所有示例都表明您需要使用XmlWorker,但我无法访问它,所以我想知道是否有任何方法可以使用writerdocument更改文档字体

我已经看到了document.HtmlStyleClass属性,但是在任何地方都找不到关于如何使用它的任何东西。

如果能提供任何帮助,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-10 14:18:10

MVCRazorToPdf是iTextSharp的XMLWorker的一个非常非常简单的包装器,它使用更简单的XMLWorkerHelper (所有默认值)来完成它的工作。如果您查看来源,您将看到以下内容:

代码语言:javascript
复制
                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语句更改为:

代码语言:javascript
复制
        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;"时工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34200416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档