2011-09-15 11 views
4

fop Quick Start Guideを使用して、単純なXMLファイルから簡単なPDFファイルを印刷しても問題ありません。しかし、私が<name>Frank</name><name>امیررضا</name>(他のエンコーディングに名前を変更)に変更すると、私は####を私の印刷PDFに入れます。私はインターネットを検索し、実行可能な解決策は見つけられませんでした。私はここで多くの設定ファイルを使用して、私の設定ファイルの一部です:Apache FOPを使用してFont Familyを変更することはできません

私は、PDFを作成するための次のコマンドを使用します。

fop -c cfg.xml -xml name.xml -xsl name2fo.xsl -pdf name.pdf 

私は、このコマンドを使用すると私は警告の下に取得する:

WARNING: xHeight value could not be determined. The font may not work as 
Sep 15, 2011 9:15:37 AM org.apache.fop.events.LoggingEventListener proce 
WARNING: Glyph "╙" (0x633, afii57427) not available in font "Helvetica". 
Sep 15, 2011 9:15:37 AM org.apache.fop.events.LoggingEventListener proce 
WARNING: Glyph "╘" (0x634, afii57428) not available in font "Helvetica". 

1 - name.xmlは含まれています

<name>امیررضا</name> 

2-name2fo.xslは含まれています

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:template match="/"> 
    <fo:root> 
     <fo:layout-master-set> 
     <fo:simple-page-master master-name="A4-portrait" 
       page-height="29.7cm" page-width="21.0cm" margin="2cm"> 
      <fo:region-body/> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 
     <fo:page-sequence master-reference="A4-portrait"> 
     <fo:flow flow-name="xsl-region-body"> 
      <fo:block> 
      Hello, <xsl:value-of select="name"/>! 
      </fo:block> 
     </fo:flow> 
     </fo:page-sequence> 
    </fo:root> 
    </xsl:template> 
</xsl:stylesheet> 

3-多くの異なる設定ファイル(cfg.xml)を試しています。

3.1:

<fop version="1.0"> 
<renderers> 
    <renderer mime="application/pdf">  
     <fonts> 
     <substitutions> 
     <substitution> 
      <from font-family="Helvetica" /> 
      <to font-family="SansSerif"/> 
     </substitution> 
     </substitutions> 
     <referenced-fonts> 
      <match font-family=".*"/>   
     </referenced-fonts>  
      <!-- register all the fonts found in a directory and all of its sub directories (use with care) --> 
     <directory recursive="true">G:\....\fop\fop-1.0\Core14_AFMs</directory> 

     <!-- automatically detect operating system installed fonts --> 
     <auto-detect/> 
     <font embed-url="C:\WINDOWS\Fonts\times.ttf"> 
     <font-triplet name="Times New Roman" style="normal" weight="normal"/> 
     </font> 
     </fonts> 
    </renderer> 
    </renderers> 
</fop> 

3.2:

<fop version="1.0"> 
<renderers> 
    <renderer mime="application/pdf">  
     <fonts> 
     <substitutions> 
     <substitution> 
      <from font-family="Helvetica" /> 
      <to font-family="SansSerif"/> 
     </substitution> 
     </substitutions> 
     <referenced-fonts> 
      <match font-family=".*"/>   
     </referenced-fonts>    

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

3.3:......

結果出力である:

こんにちは、### ####!

誰でもこの問題を解決できますか?

答えて

0

私はApache FOPを使ったことがありませんが、この記事では複数の言語のPDFを作成することができます。

+0

あなたの助けにTanx。しかし、私はこのリンクを自分で見ていました。問題は、java org.apache.fop.fonts.apps.TTFReader C:\ Iqraa.ttf Iqraa.xmlはfop 1.0ではサポートされておらず、メインクラスのフィンを作成していない例外がありました。 ;私が理解しているように、そしてAPache Fopの公式ホームページを読んでください。このsilutionはFOP version .9以下のものでした。 – Am1rr3zA

0

私はあなたがあまりにもHelveticaWorld thatcontainsアラビア文字を使用することをお勧めしますまたはあなたが動的にFOPの入力を作成する場合は、フォント名を格納する速度やFreemarkerの変数を使用することができます。

+0

私はこの問題を解決しますが、逆の順序で文字を印刷します:(私はrtlが必要ですが、私が立つことができるように – Am1rr3zA

0

私はXSLコードで追加フォントファミリによって問題を解決:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:template match="/"> 
    <fo:root> 
     <fo:layout-master-set> 
     <fo:simple-page-master master-name="A4-portrait" 
       page-height="29.7cm" page-width="21.0cm" margin="2cm"> 
      <fo:region-body/> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 
     <fo:page-sequence master-reference="A4-portrait"> 
     <fo:flow flow-name="xsl-region-body"> 
      <fo:block font-size="10pt" font-family="Tahoma"> 
      Hello, <xsl:value-of select="name"/>! 
      </fo:block> 
     </fo:flow> 
     </fo:page-sequence> 
    </fo:root> 
    </xsl:template> 
</xsl:stylesheet> 

をしかし、私はまだ逆の順序で印刷された私のペルシア語の文字であるという問題があります。変更後の

name2fo.xslが含まれています。私は "Hello"を印刷したい場合、 "oellH"(HelloはFarsi文字で書かれていると想像することができます)を印刷し、文字が分離して印刷されているという2番目の問題もあります。

2

アラビア語のような右から左のスクリプトで書かれた言語のサポート& Apache FOP 1.1ではヘブライ語と全二重のサポートが追加されました。この質問の日付に基づいて、古いApache FOPバージョンが使用されました。詳細については、http://xmlgraphics.apache.org/fop/trunk/complexscripts.htmlを参照してください。

+0

また、置換要素は、レンダラーの先行兄弟である追加のフォント要素になければなりません。FOPメーリングリストのさまざまな記事を参照してください。 – JasonPlutext

関連する問題