我有一个将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框。
答案 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服务时它不清楚的原因感到困惑。