我一直在后台服务器上使用jodconverter库将微软Word文档(*.doc)转换成PDF文件。后端是在旧的Windows Server 2008企业版上运行的Spring Boot应用程序。(jodconverter需要在这台机器上安装一个版本的Apache OpenOffice或Libre Office -我在那里安装了OpenOffice 4-简单的默认安装,而不是作为服务运行-我没有看到任何问题)
一个特定的用例是转换包含用Windows机上不存在的特定字体( IDAutomation条形码字体-它是OTF文件)呈现的文本的文档-我认为在服务器上安装该字体将是我继续操作的唯一必要的事情(右键单击字体文件->选择Install -没有其他选项),事情似乎是这样的。
现在,我从命令行启动后端-并考虑使用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>
发布于 2020-11-28 15:48:34
也许您可以尝试使用templateProfileDir选项,该选项在jodconverter-spring-boot-starter模块中可用。
我不是LibreOffice本身的专家,但是如果安装的字体是用户配置文件的一部分,我认为使用这个配置文件而不是让LibreOffice创建一个新的配置文件是可行的。
来自this示例(我更改了它的设置方式,因为您使用了spring-boot):
在我的Windows上,在使用图形用户界面设置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-29 13:05:37
我为所有的大惊小怪感到抱歉-似乎是最古老和最明智的解决方案,已经工作了很长时间的各种计算机问题-是的,机器重启-工作。不过,我不知道如果我没有尝试过下面的方法,它是否会起作用:
我尝试了@sbraconnier建议,了解了LibreOffice使用的用户配置文件。在我的例子中,我使用的是Apache OpenOffice,但是说明没有改变。这个问题仍然存在。
然后我看到了一些刷新字体缓存的建议。有一个关于如何做这个here的有趣的教程。也就是说,他们建议首先停止Windows字体缓存服务,然后转到c:\Windows\ServiceProfiles\LocalService\AppData\Local并删除与FontCache相关的目录和文件(例如,我在那里有一个名为FontCache-System.dat的文件)-然后删除c:\Windows\System32\FNTCACHE.DAT (我想是保留了一个备份),然后再次启动Windows字体缓存服务。我做了那件事,但没有用。我还观察到上面的文件需要一些时间来重新生成-我不知道是否需要重新启动机器-我看到FontCache-System.dat在重新启动之前重新生成,但FNTCACHE.DAT只有在重新启动之后才在那里。
然后我找到了一个关于使用TrueType字体here的自定义本地文件夹的链接。他们建议您可以使用一个(全局)自定义文件夹,该文件夹不依赖于正在使用它的用户配置文件。这个文件夹是{LibreOffice安装文件夹}\share\fonts\ truetype -顺便说一下,这个“共享”文件夹反映了@ OpenType提到的用户/实例配置文件文件夹的结构-我尝试创建truetype文件夹并将我的OTF字体复制到那里,但是同样没有用。
我的最后一次尝试是重新启动机器--不知何故,字体被识别了。我不确定上面的步骤到底有什么帮助--这就是为什么我要重述它们的原因。再次感谢@sbraconnier
https://stackoverflow.com/questions/65000261
复制相似问题