私は、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
自分のアプリケーション内の典型的な文書処理がかなり複雑であるが、私はそれをこのようにテストする場合、結果は同じである:
- 変数に
doc()
機能付きドキュメントをロードします。 - 変数をスタイルシートで渡し、別の変数に格納します。
- 第2変数を
xslfo:render()
関数に渡します。 - ストリームを直接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でシリアライザのオプションを上書きしても、そのまま出力されます)
eXistのどのバージョンですか? – joewiz
@joewiz、3.1.1 –
conf.xmlの空白の設定は何ですか?また、FOを生成するためにスクリプトが従うパイプライン(または再現性の高いテスト)を記述できますか? – joewiz