3

あるサーバーと私の 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

私の状況は次のとおりです。

  • デビアン 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
4

2 に答える 2

3

jetty心から、Debianパッケージから構造内にそのような一時ファイルを作成することは良い考えではありません。アップデートの場合、トラブルに巻き込まれる可能性があります。このようなキャッシュディレクトリは、たとえば/varのよう/var/tmpにに配置する必要があります。

ドキュメントによると、FOPは障害が発生した場合に一時ディレクトリを使用することになっています。おそらくあなたの発見はバグ報告に値するでしょう。

修正されるまでは、 [ キャッシュを無効にするcache-file]オプションuse-cacheを設定する必要がありますが、おそらくパフォーマンスに影響があります。

于 2012-03-02T23:25:30.863 に答える
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 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/

これが仕様なのかバグなのかはわかりませんが、Jetty が書き込めるようにこのディレクトリを作成しています...

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

...問題を解決しました。

于 2012-02-28T11:00:25.673 に答える