Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用FOP生成SVG不需要';行不通_Java_Debian_Ghostscript_Apache Fop_Batik - Fatal编程技术网

Java 使用FOP生成SVG不需要';行不通

Java 使用FOP生成SVG不需要';行不通,java,debian,ghostscript,apache-fop,batik,Java,Debian,Ghostscript,Apache Fop,Batik,在一台服务器和我的Windows笔记本电脑上,使用此方法生成PDF效果良好: 但在另一台服务器上,我收到以下错误: org.apache.batik.transcoder.TranscoderException: Error while setting up PDFDocumentGraphics2D Enclosed Exception: Error while setting up fonts at org.apache.fop.svg.PDFTranscoder.transcod

在一台服务器和我的Windows笔记本电脑上,使用此方法生成PDF效果良好:

但在另一台服务器上,我收到以下错误:

org.apache.batik.transcoder.TranscoderException: Error while setting up PDFDocumentGraphics2D
Enclosed Exception:
Error while setting up fonts
    at org.apache.fop.svg.PDFTranscoder.transcode(PDFTranscoder.java:189)
    at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(Unknown Source)
    at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(Unknown Source)
    at org.apache.batik.apps.rasterizer.SVGConverter.transcode(Unknown Source)
    at org.apache.batik.apps.rasterizer.SVGConverter.execute(Unknown Source)
我已经在谷歌上搜索了几个小时,但都没有用。我能做什么

我尝试安装以下软件包,但没有帮助:

sudo apt-get install gsfonts gsfonts-x11 gsfonts-other batik \
    libbatik-java libxmlgraphics-commons-java  \
    libxmlgraphics-commons-java fop sun-java6-fonts
我的情况是:

  • Debian 6.0.3
  • Sun Java版本“1.6.0_26”
  • JARs:avalon-framework-4.2.0.jar batik-all-1.7.jar commons-io-1.3.1.jar commons-logging-1.0.4.jar fop-0.95.jar log4j-1.2.15.jar xml-api-ext.jar xmlgraphics-commons-1.3.1.jar

解决此问题的方法是在
log4j中。属性
我将级别调到
跟踪

在那里,我看到了先前看到的
TranscoderException
之前的额外日志:

2012-02-28 11:51:24,863 DEBUG: org.apache.fop.fonts.FontCache: 
   Writing font cache to /usr/share/jetty/.fop/fop-fonts.cache
org.apache.batik.transcoder.TranscoderException: 
   Error while setting up PDFDocumentGraphics2D
祝你好运!(并编写一个关于程序将要做什么的日志,而不仅仅是在它完成之后,这样,如果操作失败,那么您就知道它在失败时试图做什么。)

在Debian上,Jetty Web服务器在用户
Jetty
下运行,其主目录位于
/usr/share/Jetty/
。但是,
jetty
用户没有对自己的主目录的写入权限,因此无法创建此
~/.fop
目录

adrian@10770-02:~$ grep jetty /etc/passwd
jetty:x:107:111::/usr/share/jetty:/bin/false
adrian@10770-02:~$ ls -ld /usr/share/jetty
drwxr-xr-x 7 root root 4096 Feb 28 11:52 /usr/share/jetty/
我不知道这是设计的,还是一个bug,但是创建这个目录以便Jetty可以编写它

sudo mkdir -p -m 0777 /usr/share/jetty/.fop

…解决了问题。

诚恳地说,从Debian包在
jetty
结构中创建这样的临时文件不是一个好主意。在更新的情况下,您可能会遇到麻烦。这样的缓存目录应该位于
/var
中,比如
/var/tmp

根据,FOP应该在发生故障时使用临时目录。也许你的发现值得一份bug报告

在修复之前,您应该使用
use cache
设置禁用缓存,这是另一种方式,但可能会影响性能