2011-12-14 45 views
3

在一臺服務器,並在我的Windows筆記本電腦,製作PDF文件使用這種方法工作得很好:SVG代與FOP不起作用

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」
  • 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-apis-ext.jar xmlgraphics-commons-1.3.1.jar

回答

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 

Horray的日誌! (並且寫下關於程序將要做什麼的日誌,而不是僅僅一次完成它,以便如果操作失敗,那麼你知道它在失敗時試圖做什麼。)

在Debian上, Jetty網絡服務器在用戶jetty下運行並且其主目錄在/usr/share/jetty/。但是,jetty用戶不具有對其自己的主目錄的寫入權限,因此無法創建此~/.fop目錄。

[email protected]:~$ grep jetty /etc/passwd 
jetty:x:107:111::/usr/share/jetty:/bin/false 
[email protected]:~$ ls -ld /usr/share/jetty 
drwxr-xr-x 7 root root 4096 Feb 28 11:52 /usr/share/jetty/ 

我不知道這是否是設計,還是一個bug,但創建這個目錄中,以便能夠碼頭寫...

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

...解決了這個問題。

3

由Debian軟件包在jetty結構中創建臨時文件並不是一個好主意。如果有更新,您可能會遇到麻煩。這種緩存目錄應位於/var,例如/var/tmp

根據documentation,FOP應該在發生故障時使用臨時目錄。可能你的發現值得一個錯誤報告。

在修復之前,您應該設置cache-file option使用use-cache禁用緩存是另一種方式,但可能會影響性能。