12

XSL変換を使用してXMLをPDFに変換しています。残念ながら、XMLから空白を保持していません。例えば:

これを変換したい:

Test Line Data         : 0xAA

XMLからPDFへ。XMLでは問題なく表示されます。Dataと:の間に9つのスペースがありますが、PDFでは次のように表示されます。

Test Line Data : 0xAA

これが私が現在していることです。XMLにデータを書き込んだ後、次のことを実行します。

XPathDocument xPathDocDiag = new XPathDocument(this.FileNameDiagXml);
XslCompiledTransform xslTransDiag = new XslCompiledTransform();
XmlTextWriter xmlWriterDiag = new XmlTextWriter(outputFO, System.Text.Encoding.UTF8);
xslTransDiag.Transform(xPathDocDiag, null, xmlWriterDiag);
xmlWriterDiag.Flush();
xmlWriterDiag.Close();

次に、Apache FOPを起動して、FOをPDFに変換します。私が言ったように、残念ながら、必要なときに空白は保存されません。変換後に機能するXML(検索と置換)のスペースの代わりに手動で追加しようとしましたが、ご存知のとおり、リテラル&はXMLに含めることができないため、オプションがありません。XmlReaderを使用してから、

<xsl:preserve-space elements="*"/>

しかし、繰り返しになりますが、それも機能しません(エラーなどは発生せず、機能しません)。
XSLのセクションは次のようになります。

<xsl:when test="Data != ''">
                <fo:table-cell text-align="left">
                    <fo:block />
                </fo:table-cell>
                <fo:table-cell text-align="left" number-columns-spanned="7">
                    <fo:block font-family="Courier New, Courier, monospace" font-size="9pt"><xsl:value-of select="Data" /></fo:block>
                </fo:table-cell>
            </xsl:when>

私はあらゆる種類の属性を変更して無駄にしようとしました。ここで明らかな何かが欠けていますか?

4

4 に答える 4

14

空白を保持したいものに属性white-space="pre"を追加します。fo:block

例:

<fo:block white-space="pre">Test Line Data         : 0xAA</fo:block>

属性white-space-treatment="preserve"も機能するはずですが、FOPで試したところ、機能しませんでした。

属性white-space-collapse="false"も機能しました。

于 2012-04-25T18:37:45.593 に答える
2

私は答えを見つけました。 http://groups.yahoo.com/group/XSL-FO/message/4128 fo:blockにwhite-space-collapse = "false"を入れると、空白が保持されます。

于 2012-04-25T18:42:05.670 に答える
1

foブロックタグでspace-after=5mmを使用できます。例

<fo:block space-after=5mm>Something</fo-block>
<fo:block>SomethingSomething</fo:block>

最初の行は、「Something」というテキストの後に5mmのスペースを作成します。

于 2014-05-30T05:47:30.597 に答える
0

後にスペースを追加できます

<fo:block space-after=7mm>Your te</fo-block>
于 2014-06-04T04:17:58.373 に答える