2017-05-23 14 views
0

私は、XSL-FOの空白処理についてのいくつかのヒントについて少し混乱しています。 (段落内の)eXist-dbアプリケーション内で生成されたXSL-FOの改行を破棄する方法は?

サンプル:段落(すべてhiの親)に使用

<hi rendition="simple:italic"> jeden její prvek i(</hi> 
<hi rendition="simple:bold-italic">E</hi> 
<hi rendition="simple:italic">)</hi> 

属性:

<xsl:attribute name="linefeed-treatment">ignore</xsl:attribute> 
<xsl:attribute name="white-space-treatment">preserve</xsl:attribute> 
<xsl:attribute name="white-space-collapse">true</xsl:attribute> 

は...

jedenjejíprvek I(を生成しますe

書式は良いですが、イタリック体と太字のイタリック体がすべて正しいです。問題は、かっこ内のスペースです。

問題が別の要素のeXist-db処理によって発生する可能性があるかどうかわかりません。 eXideでファイルを開くと、自動的にすべてのインライン要素が別々の行に分割されます。これがFOPにファイルを提供している最中であり、改行がU + 000Aと異なる場合、私は失われると思います。

UPDATE I

自分のアプリケーション内の典型的な文書処理がかなり複雑であるが、私はそれをこのようにテストする場合、結果は同じである:

  1. 変数にdoc()機能付きドキュメントをロードします。
  2. 変数をスタイルシートで渡し、別の変数に格納します。
  3. 第2変数をxslfo:render()関数に渡します。
  4. ストリームを直接pdf結果にするか、DBに保存してください。

中間製品をtest.foとして保存することはできますが、その内部にスペースに問題がある理由は明白ではありません。私は、問題が連続的なインライン要素にとって典型的なものだと思う。

UPDATE II

私はこのfoでPDFを生成しようとすると、予想通り、結果は次のとおりです。私はテストfoファイルを保存しようとした場合

<fo:root xml:lang="en" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <fo:layout-master-set> 
    <fo:simple-page-master page-height="297mm" page-width="210mm" margin-top="10mm" margin-left="20mm" margin-right="20mm" 
     margin-bottom="10mm" master-name="PageMaster1"> 
     <fo:region-body margin-top="0mm" margin-left="0mm" margin-right="0mm" margin-bottom="10mm" /> 
    </fo:simple-page-master> 
    </fo:layout-master-set> 
    <fo:page-sequence master-reference="PageMaster1"> 
    <fo:flow flow-name="xsl-region-body"> 
     <fo:block text-align="justify"> 
     <fo:block>Lorem ipsum dolor 
      <fo:inline font-style="italic">test(</fo:inline> 
      <fo:inline font-weight="bold">E</fo:inline> 
      <fo:inline font-style="italic">)end</fo:inline> 
      next lorem.</fo:block> 
     </fo:block> 
    </fo:flow> 
    </fo:page-sequence> 
</fo:root> 

、問題のある部分はそう思えます:

<fo:inline font-style="italic" color="#91046e" language="cs">jeden její prvek i(</fo:inline> <fo:inline font-weight="bold" font-style="italic" color="#5f3cb6" language="cs">E</fo:inline> <fo:inline font-style="italic" color="#91046e" language="cs">)</fo:inline> 

したがって、実際には私のスタイルシートに問題があるようです。例えば

、イタリック体のための私のテンプレート:

<xsl:template match="tei:hi[@rendition='simple:italic']"> 
    <fo:inline xsl:use-attribute-sets="italic"> 
     <xsl:apply-templates/> 
    </fo:inline> 
</xsl:template> 

私は、現時点で特別な空白や改行治療を使用していません。私は何の効果もありませんでした。私はシリアライゼーションでも演奏しようとしましたが効果はありませんでした。(特に小規模なepubファイルを作成するのにこれを使用しますが、foの出力はそのままです.Saxonでシリアライザのオプションを上書きしても、そのまま出力されます)

+0

eXistのどのバージョンですか? – joewiz

+0

@joewiz、3.1.1 –

+0

conf.xmlの空白の設定は何ですか?また、FOを生成するためにスクリプトが従うパイプライン(または再現性の高いテスト)を記述できますか? – joewiz

答えて

1

'編集>「環境設定」を選択すると、「ソフトラップ」と「表示不可」の設定を調整して、eXideが空白を追加しているかどうかを調べることができます。

'indent'と 'suppress-indent'パラメータを設定してみることもできます。 https://www.w3.org/TR/xquery-31/#id-serializationおよびhttps://www.w3.org/TR/xslt-xquery-serialization-31/#xml-indentを参照してください。

eXistが処理するFOをログに書き込むか、http://exist-db.org/xquery/fileモジュール(http://exist-db.org/exist/apps/fundocs/view.html?uri=http://exist-db.org/xquery/file&location=java:org.exist.xquery.modules.file.FileModule&details=true参照)の関数を使用してファイルを処理して、eXistがホワイトを追加しているかどうかを調べることができます-スペース。

+0

ありがとう、私は試してみます。 eXideで手動で行を結合するときはいつでも結果を期待通りに追加するべきです(セッションが終了するまで続きます)。私が目に見えないものを表示すると、本当に改行があります**しかし**私はそれらを正規表現にマッチさせることはできません! –

関連する問題