【问题标题】:SVG generation with FOP doesn't work使用 FOP 生成 SVG 不起作用
【发布时间】:2012-01-20 07:01:11
【问题描述】:

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

http://www.databasesandlife.com/svg-to-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”
  • JAR: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-apis-ext.jar xmlgraphics-commons-1.3.1.jar

【问题讨论】:

    标签: java debian ghostscript apache-fop batik


    【解决方案1】:

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

    根据documentation,FOP 应该使用临时目录以防万一。可能您的发现值得报告错误。

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

    【讨论】:

      【解决方案2】:

      解决这个问题的方法在log4j.properties我调高到TRACE

      在那里我看到了我之前看到的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 网络服务器在用户 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/
      

      我不知道这是设计使然还是错误,但是创建这个目录以便 Jetty 可以编写它...

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

      ...解决了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-26
        • 1970-01-01
        • 1970-01-01
        • 2022-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-04
        相关资源
        最近更新 更多