2012-04-25 4 views
12

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

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

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> 

Я пробовал все виды атрибута модифицирующие безрезультатно. Я пропустил что-то очевидное здесь?

ответ

11

Добавьте атрибут white-space="pre" в любой fo:block вы хотите сохранить Пробельные в

. Пример:

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

Атрибут white-space-treatment="preserve" должен также работать, но когда я попробовал его в ФОП, это не сделал.

Атрибут white-space-collapse="false" также работал.

+0

белого пространства = «до» не работает. white-space-treatment = "preserve" тоже не работало. white-space-collapse = «false» был единственным. Благодарю. – dangerisgo

+0

@ dangerisgo - Рад, что вы его работали. Какую версию FOP вы используете? (Просто любопытно.) –

+0

Я использую версию 0.20.5 – dangerisgo

1

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

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

Первая строка создаст пространство 5 мм после текста «Что-то».

0

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

<fo:block space-after=7mm>Your te</fo-block> 
Смежные вопросы