MVCrazorToPdf (iTextSharp) 使用自定义字体

2024-03-24

我正在尝试使用 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");
    });

Where writer is a PdfWriter and document is a Document

所有使用示例FontFactory表明您需要使用XmlWorker但我无权访问它,所以我想知道是否有任何方法可以使用writer or document?

我已经看到有document.HtmlStyleClass属性,但找不到任何有关如何在任何地方使用它的信息。

任何对此的帮助将不胜感激


MVCRazorToPdf https://www.nuget.org/packages/MvcRazorToPdf/是 iTextSharp 的一个非常非常简单的包装器XMLWorker并使用更简单的XMLWorkerHelper使用所有默认值来完成其工作。如果你看一下source https://github.com/andyhutch77/MvcRazorToPdf/blob/master/MvcRazorToPdf/MvcRazorToPdf.cs你会看到这个:

                document.Open();


                using (var reader = new StringReader(RenderRazorView(context, viewName)))
                {
                    XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader);

                    document.Close();
                    output = workStream.ToArray();
                }

如果您执意要使用 NuGet 版本,那么您将不得不使用此实现,并且将无法注册自定义字体。

然而,有一个开放问题 https://github.com/andyhutch77/MvcRazorToPdf/issues/21关于这一点包括修复 https://github.com/andyhutch77/MvcRazorToPdf/issues/21#issuecomment-129858670所以如果你愿意从源代码编译 https://github.com/andyhutch77/MvcRazorToPdf/您可以应用该更改,并且您应该已准备就绪。

如果您想更进一步,我建议您阅读这篇很棒的文章 https://stackoverflow.com/q/25164257/231316这表明使用 iTextSharp 解析 HTML 是多么简单布鲁诺的帖子在这里 https://stackoverflow.com/a/26220259/231316显示如何注册字体。

EDIT

根据包含修复链接的帖子(以防万一链接将来损坏),请更改上面的内容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;"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVCrazorToPdf (iTextSharp) 使用自定义字体 的相关文章

随机推荐

  • 数据绑定编译器错误:“无法解析 SafeVarargs 的类型”

    我已经尝试让 Android 数据绑定正常工作两天了 编译器问题接二连三地出现 现在我完全碰壁了 我用谷歌搜索了这个 但没有找到任何东西 这是完整的日志 java lang RuntimeException failure see logs
  • Visual Studio 2015 调用堆栈显示

    最近在我的计算机上全新安装了 Windows 10 Pro 后 我注意到每当我中断程序并打开调用堆栈时 调用堆栈都会显示应用程序名称和行号 但函数名称显示为
  • 寻找 2 个以上整数的 GCD(最大公约数)?

    我已经有一个函数可以找到 2 个数字的 GCD function getGCDBetween a b while b 0 m a b a b b m return a 但现在 我想扩展这个函数来找到 N 点的 GCD 有什么建议吗 有一种更
  • 概述 div 和图像

    我正在开发我的作品集网站 但遇到了问题 一旦我想要多层 你必须看到才能理解这一点 它们的排列完全不同 我对图像使用了相同的像素大小 重要提示 我只能对图像和内容周围的 div 使用像素 因为我需要使用 media 来更改我手机的页面 所以我
  • 使用自定义 url_path 在 @list_route 上反向

    如果我有一个包含以下代码的视图集 class ExtraRouteViewset viewsets GenericViewSet list route methods get def somefunction self request re
  • 函数内相加后结果不正确

    我有一个 java 程序没有返回正确的答案 我不明白为什么 这是代码 public class hello public static void main String args int a 5 doubleNumbers a System
  • PLSQL 错误 - ORA-00984:此处不允许列

    我写了一个 PL SQL 块 DECLARE SchemaName VARCHAR2 50 REQ SUNIL 5750 userpassword VARCHAR2 50 XYZ stmt VARCHAR2 5000 BEGIN stmt
  • Perl 的哪个版本引入了 try/catch?

    我知道 Perl 最近得到了try catch 附带的 Perl 版本是什么 最被忽视的预实验 https perldoc perl org perlexperiment页面列出了添加的功能以及 有时 后来从实验类别中毕业的功能 您还可以查
  • 如何将两个 AngularJS 应用程序合并为一个主应用程序的模块?

    另一个基本的 AngularJS 问题 我有两个 AngularJS 应用程序 slider js 角度用户界面 json js Here s slider js作为一个笨蛋 http plnkr co edit zySArHvqZgJHH
  • SVN 并重命名其运行的服务器

    我运行 VisualSVN 作为我的 SVN 服务器并使用 TortoiseSVN 作为客户端 我刚刚将服务器从 mach1 重命名为 mach2 现在无法使用 SVN 因为它正在寻找以下位置的存储库http mach1 81 http m
  • 概率密度函数 numpy 直方图/scipy stats

    我们有数组a range 10 Using numpy histogram hist bins numpy histogram a bins np max a np min a 1 range np min a np max a densi
  • Google Chrome 开发者工具中的自定义堆栈跟踪?

    我希望自定义 Google Chrome 开发人员工具 脚本 选项卡中 strack 跟踪面板中显示的项目 具体来说 我想过滤掉堆栈跟踪中的项目 并向堆栈跟踪中的某些项目添加更多描述性名称 而不必重命名我的对象和函数 我在以下位置找到了 V
  • 关闭 VTK 窗口 (Python)

    考虑以下脚本 import vtk ren vtk vtkRenderer renWin vtk vtkRenderWindow renWin AddRenderer ren iren vtk vtkRenderWindowInteract
  • Linux内核如何中断应用程序?

    首先 我是一名设备驱动程序人员 这是我第一次处理用户模式程序 我曾经有一个中断服务程序来响应硬件中断 换句话说 硬件使用中断服务程序来通知驱动程序进行服务 我现在使用 ioctl 作为应用程序和设备驱动程序之间通信的通道 并轮询它以等待响应
  • 清单中的飞行模式接收器?

    我正在开发一个 Android 应用程序 该应用程序将在工业环境中用作手持控制器 为了让平板电脑不太适合带回家 我本来打算一直尝试以编程方式打开飞行模式 但这在 4 2 中已被弃用 这也是我们为了拥有 Android Open Access
  • 如何在远程机器上运行本地python脚本

    我的本地计算机上有一个 python 脚本 有什么方法可以在远程计算机上运行此脚本 我的意思是 python 脚本应该在本地计算机上 但执行应该发生在远程计算机上并将输出返回到本地计算机 The pathos软件包中的工具可以让您轻松地与远
  • 如何根据具有相对位置的共享库构建nodejs C++插件

    我正在尝试使用构建一个node js C node gyp但不知道如何指定 Wl rpath ORIGIN这样当从节点加载时 它可以找到与以下目录位于同一目录中的共享对象库addon node 我尝试过设置我的binding gyp像这样
  • 删除 div 元素之间的“空白”

    这是我的 HTML 代码 div div div div div div div br div div div div div div div My CSS div1 width 150px height 100px white space
  • 如何在 Gitlab CI 中捕获结构化 xUnit 测试输出?

    我正在 Gitlab CI 上的 NET Core 代码库上运行自动化测试 这些测试的唯一输出是控制台 其中包含大量垃圾 并且很难准确看出哪些测试失败了 有没有一种方法可以从 xUnit 获取结构化测试输出 以便 Gitlab 可以处理文件
  • MVCrazorToPdf (iTextSharp) 使用自定义字体

    我正在尝试使用 nuget 包 MVCRazorToPdf 将自定义字体添加到我的 pdf 输出中 但我在如何执行此操作时遇到了麻烦 因为 iTextSharp 的文档不是很好 而且所有内容似乎都已过时 我当前用于创建pdf的代码是 ret