当我调用PDField.setValue
为表单字段设置值时,我得到以下堆栈跟踪:
FileSystemFontProvider.saveDiskCache(349) | Could not write to font cache
java.io.FileNotFoundException: /.pdfbox.cache (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:194)
at java.io.FileOutputStream.<init>(FileOutputStream.java:145)
at java.io.FileWriter.<init>(FileWriter.java:73)
at org.apache.pdfbox.pdmodel.font.FileSystemFontProvider.saveDiskCache(FileSystemFontProvider.java:290)
at org.apache.pdfbox.pdmodel.font.FileSystemFontProvider.<init>(FileSystemFontProvider.java:226)
at org.apache.pdfbox.pdmodel.font.FontMapperImpl$DefaultFontProvider.<clinit>(FontMapperImpl.java:130)
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.getProvider(FontMapperImpl.java:149)
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.findFont(FontMapperImpl.java:413)
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.findFontBoxFont(FontMapperImpl.java:376)
at org.apache.pdfbox.pdmodel.font.FontMapperImpl.getFontBoxFont(FontMapperImpl.java:350)
at org.apache.pdfbox.pdmodel.font.PDType1Font.<init>(PDType1Font.java:145)
at org.apache.pdfbox.pdmodel.font.PDType1Font.<clinit>(PDType1Font.java:79)
at org.apache.pdfbox.pdmodel.font.PDFontFactory.createFont(PDFontFactory.java:62)
at org.apache.pdfbox.pdmodel.PDResources.getFont(PDResources.java:143)
at org.apache.pdfbox.pdmodel.interactive.form.PDDefaultAppearanceString.processSetFont(PDDefaultAppearanceString.java:164)
at org.apache.pdfbox.pdmodel.interactive.form.PDDefaultAppearanceString.processOperator(PDDefaultAppearanceString.java:131)
at org.apache.pdfbox.pdmodel.interactive.form.PDDefaultAppearanceString.processAppearanceStringOperators(PDDefaultAppearanceString.java:107)
at org.apache.pdfbox.pdmodel.interactive.form.PDDefaultAppearanceString.<init>(PDDefaultAppearanceString.java:85)
at org.apache.pdfbox.pdmodel.interactive.form.PDVariableText.getDefaultAppearanceString(PDVariableText.java:93)
at org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.<init>(AppearanceGeneratorHelper.java:94)
at org.apache.pdfbox.pdmodel.interactive.form.PDTextField.constructAppearances(PDTextField.java:262)
at org.apache.pdfbox.pdmodel.interactive.form.PDTerminalField.applyChange(PDTerminalField.java:228)
at org.apache.pdfbox.pdmodel.interactive.form.PDTextField.setValue(PDTextField.java:218)
Run Code Online (Sandbox Code Playgroud)
我正在运行最新版本的PDFBox 2.0.4.我的网络服务器很可能无权访问.pdfbox.cache
默认位置(这似乎是JVM属性user.home
).有没有办法禁用磁盘缓存或更改缓存文件的位置?
我注意到我可以设置一个名为JVM的系统属性pdfbox.fontcache
,但是我的webapp与其他应用程序共享一个jvm,因此这不是最佳解决方案.我也尝试使用该解决方案并设置pdfbox.fontcache
为/tmp
,但它实际上并没有创建一个文件(虽然它现在每次启动时只抛出一次堆栈跟踪).
我查看了代码,FileSystemFontProvider
问题代码似乎在saveDiskCache
方法中.在该方法中,它首先尝试编写该文件,但抛出FileNotFoundException而不是SecurityException.FileNotFoundException继承自IOException.
File file = getDiskCacheFile();
try
{
writer = new BufferedWriter(new FileWriter(file));
}
catch (SecurityException e)
{
return;
}
Run Code Online (Sandbox Code Playgroud)
当您pdfbox.fontcache
使用临时文件夹设置/tmp
JVM可以在其中写入新文件.pdfbox.cache
时,可以在使用PDFBox生成PDF时创建一个调用的缓存文件(我也使用PDFBox 2.0.4).
也许您的JVM无法在/tmp
目录中创建新文件?要检查此操作,请尝试使用运行JVM的用户使用交互式命令提示符(shell)创建新文件.
使用该命令,ls -lA /tmp
您应该.pdfbox.cache
在配置的临时文件夹中看到一个文件(例如,使用tomcat JVM和用户):
-rw-r - r-- 1 tomcat tomcat 2050 Dec 29 16:13 .pdfbox.cache
它不是最佳解决方案,因为您无法pdfbox.fontcache
在单个JVM上设置多个系统属性.
归档时间: |
|
查看次数: |
4163 次 |
最近记录: |