2013-12-15 3 views
8

私はutf-8にencoding属性を持つxmlファイルを持っています。xslt-foはutf-8をサポートしていませんか?

fop -xml xml.xml -xsl xsl.xsl -pdf pdf.pdfを実行すると、私の出力pdfがutf-8文字に壊れています。重要なのは、xslファイルのテキストはutf-8文字ではなく、xmlのテキストと同じです。

Utf-8文字は、に置き換えられます。

何が間違っている可能性がありますか?

XSLファイル:

<?xml version="1.0" encoding="UTF-8"?> 

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java" version="1.0" xmlns="http://www.w3.org/1999/xhtml"> 
<xsl:output method="xml" version="1.0" indent="yes" encoding="UTF-8" /> 

<xsl:template match="/"> 
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 

     <fo:layout-master-set> 
      <fo:simple-page-master master-name="A4" margin="1cm"> 
      <fo:region-body margin="2cm" margin-left="1cm" margin-right="1cm"/> 
      <fo:region-before extent="3cm"/> 
      <fo:region-after extent="5mm"/> 
      </fo:simple-page-master> 
     </fo:layout-master-set> 

     <fo:page-sequence master-reference="A4"> 
      <fo:static-content flow-name="xsl-region-before"> 
       <fo:block font-size="24pt" font-family="Calibri">Filmoteka</fo:block> 
      </fo:static-content> 
      <fo:static-content flow-name="xsl-region-after"> 
       <fo:block font-size="10pt" font-family="Calibri">Wygenerowano: <xsl:call-template name="dataCzas" /></fo:block> 
      </fo:static-content> 

      <fo:flow flow-name="xsl-region-body"> 
       <fo:block font-size="12pt" font-family="Calibri" padding-after="1cm"> 
        <fo:table table-layout="fixed" width="100%" border="solid black 1px"> 
        <fo:table-column column-width="8mm"/> 
        <fo:table-column column-width="40mm"/> 
        <fo:table-column column-width="40mm"/> 
        <fo:table-column column-width="13mm"/> 
        <fo:table-column column-width="65mm"/> 
         <fo:table-header> 
          <fo:table-row> 
           <fo:table-cell border="solid black 2px"> 
            <fo:block font-weight="bold" background-color="#cccccc">Lp.</fo:block> 
           </fo:table-cell> 
           <fo:table-cell border="solid black 2px"> 
            <fo:block font-weight="bold" background-color="#cccccc">Tytuł PL</fo:block> 
           </fo:table-cell> 
           <fo:table-cell border="solid black 2px"> 
            <fo:block font-weight="bold" background-color="#cccccc">Reżyseria</fo:block> 
           </fo:table-cell> 
           <fo:table-cell border="solid black 2px"> 
            <fo:block font-weight="bold" background-color="#cccccc">Rok</fo:block> 
           </fo:table-cell> 
           <fo:table-cell border="solid black 2px"> 
            <fo:block font-weight="bold" background-color="#cccccc">Obsada</fo:block> 
           </fo:table-cell> 
          </fo:table-row> 
         </fo:table-header> 
         <fo:table-body> 
          <xsl:apply-templates /> 
         </fo:table-body> 
        </fo:table> 
       </fo:block> 
      </fo:flow> 



     </fo:page-sequence> 

    </fo:root> 
</xsl:template> 


<xsl:template match="film"> 
    <fo:table-row> 
     <fo:table-cell border="solid black 1px"> 
      <fo:block><xsl:number format="1"/></fo:block> 
     </fo:table-cell> 
     <fo:table-cell border="solid black 1px"> 
      <fo:block font-family="Calibri"><xsl:value-of select="tytul_pol"/></fo:block> 
     </fo:table-cell> 
     <fo:table-cell border="solid black 1px"> 
      <fo:block font-family="Calibri"><xsl:value-of select="rezyser"/></fo:block> 
     </fo:table-cell> 
     <fo:table-cell border="solid black 1px"> 
      <fo:block font-family="Calibri"><xsl:value-of select="rok"/></fo:block> 
     </fo:table-cell> 
     <fo:table-cell border="solid black 1px"> 
      <fo:block font-family="Calibri"><xsl:value-of select="obsada"/></fo:block> 
     </fo:table-cell> 
    </fo:table-row> 
</xsl:template> 

<xsl:template name="dataCzas"> 
    <xsl:value-of select="java:format(java:java.text.SimpleDateFormat.new('dd MMMM yyyy, HH:mm:ss'), java:java.util.Date.new())"/> 
</xsl:template> 

</xsl:stylesheet> 

xmlファイル:

http://pastebin.com/fr9fChtn

+0

サンプルxmlもありますか? – rene

+0

はい、私は質問を置き換えました – user3050705

答えて

6

FOPは#として文字を出力した場合は、選択したフォントは、それらを表現するためのグリフが含まれていません。

あなたのXML入力ファイルのような行が含まれているためであると考えられる:

<kraj>Francja, USA, Włochy</kraj> 

ここに問題のある文字がłです。

あなたの質問に答えるには:FOPはUTF-8をサポートしています。フォント(あなたのケースでは:font-family='Calibri')には文字を表す手段がありません。

この確か場合、FOP出力するはずもあなたが選択したものは何でもフォントに存在しないこれらの文字を考慮するために今

WARNING: Glyph for "ł" not available in font "DejaVuSans" 

の線に沿って警告、どちらか変更した場合回避策として、出力フォントをすべてインラインで分離してください。

は例えば、これはあなたが文字Σ(数学演算子)のために、右のフォントが選択されていることを確認する方法である:http://xmlgraphics.apache.org/fop/trunk/fonts.html

<fo:block> 
    <fo:inline font-family='Symbol'>Σ</fo:inline> 
</fo:block> 

はFOPとフォントに関する詳しい情報は、こちらのページをご覧ください。

0

解決策はずっと簡単かもしれません。私たちのケースでは、完全なフォントをembeddするCalibriフォント定義にFOPのフォント設定Webページだけ追加

符号化モード=「半角」

を読んで、不足しているグリフのための警告を得ました。これにより私たちの問題が解決されました(FOP 2.0)。

関連する問題