Сохранение пробелов в PDF после XSL-преобразования

Я конвертирую XML в PDF, используя XSL-преобразование. К сожалению, это не сохраняет пробелы в XML. Например:

Я хочу преобразовать это:

Test Line Data         : 0xAA

в PDF из XML. Он выглядит хорошо в XML, он имеет 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 ответа

Решение

Добавьте атрибут 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" тоже сработало.

Я нашел ответ. http://groups.yahoo.com/group/XSL-FO/message/4128 Когда я помещаю white-space-collapse="false" в fo:block, пробел сохраняется.

Вы можете использовать пробел после 5 мм в теге блока fo. пример

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

Первая строка создаст пространство 5 мм после текста "Нечто".

Вы можете добавить пробел после

<fo:block space-after=7mm>Your te</fo-block>
Другие вопросы по тегам