【问题标题】:ABCPdf not embedding a newly added custom fontABCPdf 未嵌入新添加的自定义字体
【发布时间】:2016-02-19 00:53:02
【问题描述】:

我有一个将 HTML 转换为 PDF 的 Windows 服务。我通过调用嵌入自定义前端

var fontSwiftFont = pdfDoc.EmbedFont("swift-fontv2", LanguageType.Latin);

在我的本地电脑和 QA 环境上一切正常,但是在生产服务器上安装新字体后,该字体没有嵌入到 Pdf 中。不过,html 在服务器上的 IE 中显示正常。

根据 ABCPdf 网站,"Fonts are cached so newly added fonts will not be available to ABCpdf until the application is restarted."。但是重启服务并不能解决问题。

如果我运行一个独立的测试应用程序,它与它工作的服务相同。

我怀疑重启会解决问题,但我无法重启,因为它是一个运行其他应用程序的 prod box。

【问题讨论】:

  • 如果我运行一个独立的测试应用程序,它的功能与它的服务相同。 - 这表明存在权限问题。
  • 是的,它在不同的帐户下运行,这表明 ABCPdf 以每个帐户为基础缓存字体,但仍然没有解释为什么需要重新启动才能让 Windows 服务看到新字体。
  • 这确实是极端的。

标签: css fonts windows-services pdf-generation abcpdf


【解决方案1】:

ABCpdf 只知道当前进程。对它来说,重启进程和重启机器是完全一样的。

因此,如果这两种情况之间存在差异,那么原因就在 ABCpdf 之外。

然而,更普通的解释是重新启动了错误的进程。最好的检查方法是使用 Process Explorer(在 MS 站点上)在您的机器上搜索所有已加载 ABCpdf.dll 的进程。

如果您需要 ABCpdf 在不重新启动的情况下使用这些字体,那么您只需要使用字体文件的路径调用 EmbedFont。同样,您可以使用 XFont.Unload 函数卸载字体。

关于这两个函数的详细信息,请参见:

http://www.websupergoo.com/helppdfnet/source/5-abcpdf/doc/1-methods/embedfont.htm

http://www.websupergoo.com/helppdfnet/source/5-abcpdf/xfont/1-methods/unload.htm

请注意,Gecko HTML 引擎的字体工作方式略有不同,因为 Gecko 引擎作为进程池运行。因此,即使 ABCpdf 知道一种新字体,子进程也可能要等到它们重新启动后才知道。这是可以使用 EndTasks 函数强制执行的操作。

此功能的详细信息见:

http://www.websupergoo.com/helppdfnet/source/5-abcpdf/xhtmloptions/1-methods/endtasks.htm

【讨论】:

    【解决方案2】:

    是的,重新启动解决了问题。我仍然对 ABCPdf 将缓存字体存储在哪里以及为什么在我重新启动 Windows 服务时它不清除感到困惑。

    【讨论】:

    • 同样的情况,我想我需要重启一个服务器,你发现这是为什么了吗?
    【解决方案3】:

    我也有同样的问题,字体已正确安装,我可以

    如果请求不是通过 IIS,AbcPdf 可以获取此字体。 所以我认为问题是这种字体只能安装在我的帐户上,IIS 没有。

    我为所有用户安装后,问题已经解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2012-03-27
      • 2010-09-26
      • 2021-06-16
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      相关资源
      最近更新 更多