0

我一直在使用 jodconverter 库将 Microsoft Word 文档 (*.doc) 转换为后端服务器上的 PDF 文件。后端是在旧的 Windows Server 2008 Enterprise 上运行的 Spring Boot 应用程序。(jodconverter 需要在这台机器上安装一个 Apache OpenOffice 或 Libre Office 版本 - 我在那里安装了 OpenOffice 4 - 简单的默认安装,不作为服务运行 - 我没有看到任何问题)

一个特定的用例是转换包含使用 Windows 机器上不存在的特定字体呈现的文本的文档(IDAutomation 条形码字体 - 它是 OTF 文件) - 我发现在服务器上安装该字体是唯一必要的让我前进的事情(右键单击字体文件->选择安装-没有其他选项),事情似乎就是这样。

现在,我从命令行启动后端 - 并考虑使用 NSSM 将其包装到 Windows 服务中。我得到了一个很好的工作服务,在本地系统帐户下运行——这似乎工作得很好。

后来有人向我指出,在 DOC 到 PDF 的转换过程中不再呈现条形码字体。事实上,我切换回命令行交互版本,字体再次出现。我知道这显然是我安装该字体的方式以及在本地系统帐户下(或其他任何方式)的问题,该字体无法访问并且使用了后备字体。

我试图指定在不同的帐户下运行该服务 - 特别是我安装字体的那个 - 但这没有帮助。

问题 a) - 如何安装字体以便本地系统帐户可以访问它?如果我可以避免必须以本地管理员身份登录,那就太好了-尽管如果这是唯一的方法,那么我将继续这样做-我认为这个问题是否更适合服务器故障或超级用户,但决定在这里问它,因为我原来的问题似乎是在应用程序编程级别

问题 b) - 是否有一个日志文件,我可以在其中跟踪未找到正确字体和使用替代字体的实际错误消息?

谢谢

[编辑:我的 pom.xml 中与 JODConverter 版本相关的内容]:

<properties>        
   <jodconverter.version>4.3.0</jodconverter.version>
</properties> 
...
<dependencies>
...
    <dependency>
        <groupId>org.jodconverter</groupId>
        <artifactId>jodconverter-spring-boot-starter</artifactId>
        <version>${jodconverter.version}</version>
    </dependency>
    <dependency>
        <groupId>org.jodconverter</groupId>
        <artifactId>jodconverter-local</artifactId>
        <version>${jodconverter.version}</version>
    </dependency>
</dependencies>
4

2 回答 2

1

对于所有的大惊小怪,我很抱歉 - 似乎最古老和最明智的解决方案多年来一直适用于各种计算机问题 - 是的,机器重启 - 奏效了。但是,如果我没有尝试以下方法,我不知道它是否会起作用:

我尝试了@sbraconnier 的建议,了解 LibreOffice 使用的用户配置文件。就我而言,我使用的是 Apache OpenOffice,但说明没有改变。问题仍然存在。

然后我看到了其他一些刷新字体缓存的建议。这里有一个关于如何做到这一点的有趣教程。也就是说,他们建议先停止 Windows Font Cache Service,然后去 c:\Windows\ServiceProfiles\LocalService\AppData\Local 并删除与 FontCache 相关的目录和文件(例如,我在那里有一个名为 FontCache-System.dat 的文件) - 然后还要删除 c:\Windows\System32\FNTCACHE.DAT (我猜是保留备份)并再次启动 Windows 字体缓存服务。我这样做了,但无济于事。我还观察到上述文件需要一些时间才能重新生成 - 我不知道是否需要重新启动机器 - 我看到 FontCache-System.dat 在重新启动之前已重新生成,但 FNTCACHE.DAT 仅存在重启后。

然后我在这里找到了一个关于为 TrueType 字体使用自定义本地文件夹的链接。他们建议您可以使用不依赖于使用它的用户配置文件的(全局)自定义文件夹。这个文件夹是 {LibreOffice 安装文件夹}\share\fonts\truetype - 顺便说一下,这个“共享”文件夹反映了@sbraconnier 提到的用户/实例配置文件文件夹的结构 - 我尝试创建 truetype 文件夹并将我的 OpenType OTF 字体复制到那里,但又一次,无济于事。

我最后一次尝试是重新启动机器 - 字体以某种方式被识别。我不确定上述步骤究竟有什么帮助 - 这就是我重新叙述它们的原因。再次感谢@sbraconnier

于 2020-11-29T13:05:36.677 回答
1

也许您可以尝试使用 jodconverter-spring-boot-starter 模块中提供的templateProfileDir选项。

我不是 LibreOffice 本身的专家,但如果安装的字体是用户配置文件的一部分,我认为使用这个配置文件而不是让 LibreOffice 创建一个新的配置文件会起作用。

这个例子中(我改变了它的设置方式,因为你使用了 spring-boot):

在我的 Windows 上,在使用 GUI 设置 LibreOffice 以满足我的需要之后(我猜你会安装字体),我将目录 C:\Users\myUser\AppData\Roaming\LibreOffice\4 复制到 C: \JodConverter\templateProfile (充当不会更改的模板配置文件目录)并将 templateProfileDir 设置为此副本(在 application.yml 文件中):

jodconverter:
  local:
    enabled: true
    template-profile-dir: C:/JodConverter/templateProfile
于 2020-11-28T15:48:33.723 回答