2013-12-15 3 views
8

मेरे पास एक एन्कोडिंग विशेषता के साथ utf-8 में एक XML फ़ाइल है।क्या xslt-fo utf-8 का समर्थन नहीं करता है?

जब मैं fop -xml xml.xml -xsl xsl.xsl -pdf pdf.pdf निष्पादित करता हूं, तो मेरे आउटपुट पीडीएफ ने यूटीएफ -8 अक्षरों को तोड़ दिया है। क्या महत्वपूर्ण है, xsl फ़ाइल का पाठ utf-8 वर्णों के बिना है, xml से पाठ के समान है।

यूटीएफ -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

एफओपी # के रूप में वर्ण आउटपुट तो चयनित फ़ॉन्ट उन्हें प्रतिनिधित्व करने के लिए एक ग्लिफ़ शामिल नहीं है।

यह शायद इसलिए है क्योंकि आपके XML इनपुट फ़ाइल की तरह लाइनों में शामिल हैं:

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

समस्याग्रस्त चरित्र यहाँ ł है।

तो, अपने प्रश्न का उत्तर देने के लिए: एफओपी यूटीएफ -8 का समर्थन करता है, यह सिर्फ इतना है कि फ़ॉन्ट (आपके मामले में: font-family='Calibri') में वर्णों का प्रतिनिधित्व करने का कोई साधन नहीं है।

यह वास्तव में मामला है, एफओपी चाहिए उत्पादन लाइनों

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> 

एफओपी साथ फोंट के बारे में अधिक जानकारी के लिए इस पेज देखें।

0

समाधान बहुत आसान हो सकता है। हमारे मामले में हम लापता ग्लिफ़ के लिए चेतावनी है, पूर्ण फ़ॉन्ट embedd को Calibri फ़ॉन्ट परिभाषा को एफओपी फ़ॉन्ट विन्यास वेब पेज और हाल ही में जोड़े

एन्कोडिंग मोड = "एकल-बाइट"

पढ़ें। इसने हमारे लिए मुद्दा हल किया (एफओपी 2.0 के साथ)।

संबंधित मुद्दे