Специальная проблема с кодировкой символов в Solaris с сервером weblogic

У меня есть приложение, которое использует fop и xslt для создания файла PDF. Специальные символы §£?ÐÅÆ в PDF отображаются как ????.

Сервер weblogic работает на машине Solaris. я уже пробовал с

<charset-params>
    <input-charset>
        <resource-path>/*</resource-path>
        <java-charset-name>UTF-8</java-charset-name>
    </input-charset>
    <charset-mapping>
     <iana-charset-name>UTF-8</iana-charset-name>
    <java-charset-name>UTF-8</java-charset-name>
 </charset-mapping>     
</charset-params> 

in weblogic.xml.

Я также пробовал с

transformer.setOutputProperty( OutputKeys.METHOD, "xml");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
            transformer.setOutputProperty( OutputKeys.INDENT, "yes");
            transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

Там вроде ничего не работает.


person saurabh    schedule 05.05.2011    source источник


Ответы (1)


Вы настроили fop для поиска шрифтов с этими символами? Например, в Solaris 11 с использованием fop (но не с weblogic) мне пришлось указать пути для шрифтов в файле fop-conf.xml:

<?xml version="1.0"?>
<!-- NOTE: This is the version of the configuration -->
<fop version="1.0">
  <renderers>
    <renderer mime="application/pdf">
      <fonts>
         <!-- register all the fonts found in a directory -->
         <directory>/usr/share/fonts/TrueType/core/</directory>
         <directory>/usr/share/fonts/TrueType/dejavu/</directory>
         <directory>/usr/share/fonts/TrueType/liberation/</directory>
         <directory>/usr/share/fonts/TrueType/unifont/</directory>

         <!-- register all the fonts found in a directory and all of its sub directories (use with care) -->
         <!-- directory recursive="true">C:\MyFonts2</directory -->

         <!-- automatically detect operating system installed fonts -->
         <auto-detect/>
      </fonts>
   </renderer>

   <renderer mime="application/postscript">
      <fonts>
         <directory>/usr/share/fonts/X11/Type1/</directory>
         <directory>/usr/share/ghostscript/fonts/</directory>
         <directory>/usr/share/fonts/TrueType/core/</directory>
         <directory>/usr/share/fonts/TrueType/dejavu/</directory>
         <directory>/usr/share/fonts/TrueType/liberation/</directory>
         <directory>/usr/share/fonts/TrueType/unifont/</directory>
      </fonts>
    </renderer>
</renderers>
</fop>

(В старых версиях Solaris пути к шрифтам будут другими.)

Подробнее см.:

person alanc    schedule 05.05.2011
comment
Мой сервер — Solaris 5.10 sparc. Подойдет ли этот путь. Если нет, как получить соответствующий путь к шрифтам. Также, пожалуйста, скажите мне, как предоставить ссылку на этот файл в моем веб-приложении. Должен ли я зарегистрировать этот файл где-нибудь в web.xml или мне нужно добавить код Java, чтобы использовать его. - person saurabh; 06.05.2011
comment
Я новичок в FOP, поэтому не очень разбираюсь в этом. Я пробовал с fopFactory.setUserConfig(new File(servletContext.getRealPath(/xml/fo/fop-conf.xml))); в моем классе генератора pdf и использовал приведенный выше xml, но это не сработало. - person saurabh; 06.05.2011
comment
FopFactory fopFactory = FopFactory.newInstance(); fopFactory.setUserConfig(новый файл(servletContext.getRealPath(/xml/fo/fop-conf.xml))); FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); foUserAgent.setBaseURL(файл:/// + путь); - person saurabh; 06.05.2011
comment
OutputStream out = новый java.io.FileOutputStream (pdffile); out = new java.io.BufferedOutputStream(out);Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF,foUserAgent, out);TransformerFactory factory = TransformerFactory.newInstance();StreamSource st = new StreamSource(servletContext.getResourceAsStream(/xml/ fo/test.xsl)); Трансформатор-трансформер = factory.newTransformer(st);transformer.setParameter(versionParam, 2.0);Source src = new StreamSource(new java.io.StringReader(getXML(pgmBriefId, name, dept))); Результат res = новый SAXResult(fop.getDefaultHandler()); - person saurabh; 06.05.2011
comment
трансформатор.setOutputProperty( OutputKeys.METHOD, xml); convert.setOutputProperty({xml.apache.org/xslt}indent-amount, 2); трансформатор.setOutputProperty( OutputKeys.INDENT, да); трансформатор.setOutputProperty(OutputKeys.ENCODING, UTF-8); трансформатор.преобразование (источник, разрешение); - person saurabh; 06.05.2011
comment
Еще одна вещь .... когда я создал исполняемую банку с классом генератора PDF и xsl и попробовал это на том же сервере, используя. - person saurabh; 06.05.2011
comment
java -Dfile.encoding=UTF-8 -jar test.jar, PDF-файл будет правильно сгенерирован со всеми специальными символами. Итак, я не понимаю, что происходит с веб-приложением. - person saurabh; 06.05.2011