Сохранение пробелов в 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>
Я пробовал всевозможные модификации атрибутов безрезультатно. Я пропустил что-то очевидное здесь?
Ответы
Ответ 1
Добавьте атрибут 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"
.
Ответ 2
Я нашел ответ. http://groups.yahoo.com/group/XSL-FO/message/4128 Когда я помещаю white-space-collapse = "false" в fo: block, пробелы сохраняются.
Ответ 3
Вы можете использовать пробел после = 5 мм в теге fo block. Пример
<fo:block space-after=5mm>Something</fo-block>
<fo:block>SomethingSomething</fo:block>
Первая строка создаст пространство размером 5 мм после текста "Что-то".
Ответ 4
Вы можете добавить пробел после
<fo:block space-after=7mm>Your te</fo-block>