2011-12-14 1 views
3

На одном сервере, и на моем ноутбуке Windows, производить PDF-файлов с помощью этого метода работает отлично:SVG поколения с ФОП не работает

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/ 

Я не знаю, является ли это дизайн, или ошибка, но создание этого каталога, так что Jetty мог написать это ...

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

... решить эту проблему.

3

С уважением, не рекомендуется создавать такие временные файлы внутри структуры jetty из пакета Debian. В случае обновления вы можете столкнуться с проблемами. Такой каталог кеша должен быть расположен в /var, например /var/tmp.

Согласно documentation, FOP должен использовать временный каталог в случае сбоя. Вероятно, ваше заключение заслуживает отчета об ошибке.

До тех пор пока оно не будет исправлено, вы должны установить cache-file option Отключить кеш с помощью use-cache - это еще один способ, но, вероятно, с последствиями производительности.

Смежные вопросы