ABCPdf没有嵌入新添加的自定义字体

时间:2016-02-19 00:53:02

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

我有一个将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框。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

是的,重新启动解决了问题。我仍然对ABCPdf存储缓存字体的位置以及当我重新启动Windows服务时它不清楚的原因感到困惑。