0

从命令提示符运行 pdf2htmlEX.exe Windows 二进制文件按预期工作。同时,在包装器(在我的情况下为 .Net)中运行 pdf2htmlEX Windows 二进制文件时,我收到如下错误。

__tmp_font1.ttf is not in a known format (or uses features of that format fontfo
rge does not support, or is so badly corrupted as to be unreadable)
Cannot load font C:\Users\admin\AppData\Local\Temp\pdf2htmlEX-5RLDCX/__tmp_fo
nt1.ttf
4

1 回答 1

0

这是一个非常模糊的错误,并且在使用 Windows 二进制版本时似乎在用户中很常见。

显然 Lu Wang 无法为 Windows 用户提供解决方案,因为所有相关的帖子都被标记为“信息不足”。不幸的是,pdf2htmlEX项目也被归档了,不能添加新的评论,所以我在这里添加这些信息,希望这可能对以后的其他人有所帮助。

在我的场景中,该库是通过 ASP.Net 包装器方法调用的,该方法使用 System.Diagnostics.Process 将上传的文件转换为 HTML 版本。Pdf2htmlEX 库可以在命令提示符下正常运行,并且由于某种原因,它也可以在我的开发环境中完美运行,但不能在生产环境中运行(两者都是 Windows Server 2012R2)。

我的第一个假设,而且是正确的,是存在权限问题。Pdf2htmlEX 在内部使用 FontForge 来处理字体,默认情况下,其中一个或两个都使用 Windows Temp 目录来存储用于创建 HTML 和/或其他文件的资源文件。而且,我“相信”虽然没有得到证实,但它也可能使用活动用户的%USERPROFILE%\AppData\Local\Temp文件夹......

当从命令提示符运行测试命令时,您是在您的用户上下文中操作,并且您的用户可以做的所有事情,Pdf2htmlEX 都可以做。所以一切都按预期工作。

在服务器环境中,进程在 ApplicationPoolIdentity 下运行,这是一种具有有限权限的特殊 IIS 用户类型。这对我来说失败了。虽然,我会看到在 Windows Temp 文件夹中创建的文件夹和文件,但 Pdf2HtmlEX 无法打开它们以在其他地方创建最终文件。

解决方案:(对于您的个人情况,可能还有其他解决方案)在我的情况下,添加一个新的系统用户,将该用户添加到Users组中,然后将 IIS 工作进程设置为该帐户解决了该问题。我相信的原因是该Users组具有对 Windows Temp 目录的读/写访问权限,以及 Pdf2htmlEX 完成所需的系统的其他可能区域。

于 2019-10-04T21:26:22.687 回答