Fonts 使用java jar中包装在windows服务中的jodconverter-字体问题

Fonts 使用java jar中包装在windows服务中的jodconverter-字体问题,fonts,windows-server-2008,nssm,jodconverter,Fonts,Windows Server 2008,Nssm,Jodconverter,我一直在使用jodconverter库在后端服务器上将Microsoft Word文档(*.doc)转换为PDF文件。后端是在旧的Windows Server 2008企业版上运行的Spring引导应用程序。(jodconverter要求在这台机器上安装Apache OpenOffice或Libre Office版本-我在那里安装了OpenOffice 4-简单的默认安装,不是作为服务运行-我没有发现任何问题) 一个特定的用例是转换包含使用Windows计算机上不存在的特定字体呈现的文本的文档(

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

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

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

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

我试图指定在另一个帐户下运行该服务,特别是我安装字体的帐户,但这没有帮助

问题a)-如何安装字体以便本地系统帐户可以访问?如果我可以避免以本地管理员的身份登录,那就太好了——虽然如果这是唯一的方法,那么我会继续这样做——我想这个问题是否更适合serverfault或超级用户,但决定在这里问,因为我最初的问题似乎是在应用程序编程级别上

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

谢谢

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

<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.3.0
...
...
org.jodconverter
jodconverter弹簧启动机
${jodconverter.version}
org.jodconverter
本地jodconverter
${jodconverter.version}

也许您可以尝试使用jodconverter spring启动程序模块中提供的选项

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

来自示例(自从使用spring boot后,我更改了它的设置方式):

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


也许您可以尝试使用该选项,该选项在jodconverter spring引导启动程序模块中可用

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

来自示例(自从使用spring boot后,我更改了它的设置方式):

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


我为所有的大惊小怪感到抱歉-似乎解决各种计算机问题的最古老和最明智的解决方案——是的,机器重新启动——奏效了。但我不知道如果我没有尝试以下方法,它是否会奏效:

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

然后我看到了一些刷新字体缓存的其他建议。有一个有趣的教程介绍了如何执行此操作。即,他们建议首先停止Windows字体缓存服务,然后转到c:\Windows\ServiceProfiles\LocalService\AppData\Local并删除与FontCache相关的目录和文件(例如,我在那里有一个名为FontCache-System.dat的文件)-然后还要删除c:\Windows\System32\FNTCACHE.dat(我想是保留备份)然后再次启动Windows字体缓存服务。我这样做了,但没有效果。我还注意到,重新生成上述文件需要一些时间-我不知道是否需要重新启动计算机-我看到FontCache-System.dat在重新启动之前已重新生成,但FNTCACHE.dat仅在重新启动后才出现

然后我找到了一个关于为TrueType字体使用自定义本地文件夹的链接。他们建议您可以使用一个(全局)自定义文件夹,该文件夹不依赖于使用它的用户配置文件。该文件夹是{LibreOffice installation folder}\share\font\TrueType-顺便说一句,这个“共享”文件夹镜像了@sbraconier提到的用户/实例配置文件文件夹的结构-我尝试创建truetype文件夹并将我的OpenType OTF字体复制到那里,但同样没有效果

我最后一次尝试是重新启动机器——不知怎么的,字体被识别出来了。我不确定上面的步骤到底有什么帮助-
jodconverter:
  local:
    enabled: true
    template-profile-dir: C:/JodConverter/templateProfile