Преобразование таблицы xml / html в pdf через xsl-fo - PullRequest
2 голосов
/ 19 февраля 2011

Я работаю над кодом xslt и xsl-fo для преобразования в html и pdf соответственно.

В моем исходном xml есть таблица, которую я могу скопировать напрямую для вывода html.

     <text>
        <table border='1'>
          <thead>
            <tr><th>Problem</th><th>Date</th><th>Comments</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Cholecystitis</td><td>9/28/2002 - 6/2003</td>
              <td>Resolved</td>
              <td>Surgery postponed until after delivery</td>
            </tr>
            <tr>
              <td>Pregnancy</td><td>7/2001 - 4/22/2002</td>
              <td>Resolved</td>
              <td>Prior history of miscarraige</td>
            </tr>
            <tr><td>Ankle Sprain</td><td>3/28/2005</td>
              <td>Current</td>
              <td>Slipped on ice and fell</td>
            </tr>
          </tbody>
        </table>
     </text>

Я просто использую это для копирования содержимого для узла:

<xsl:copy-of select="."/>

Я полагаю, это работает для преобразования xslt в html, поскольку браузер может интерпретировать это напрямую.Но для моего PDF я предполагаю, что я должен использовать xsl-fo, который совершенно другой.Я знаю, что в xsl-fo мне нужно использовать:

<fo:table>

Но существует ли «стандартный» способ форматирования этой таблицы, чтобы можно было использовать ее для генерации моего pdf?Xsl: copy для pdf создает одну строку со всеми извлеченными значениями, но без таблицы.

Спасибо!

===========================================

РЕДАКТИРОВАТЬ

То, что я пытаюсь сделать, это кодировать некоторые xslt в "parse""таблица встроена в мои исходные XML-файлы, чтобы сгенерировать что-то вроде этого:

<fo:table  table-layout="fixed" width="100%">
    <fo:table-column column-width="25mm"/>
    <fo:table-column column-width="25mm"/>
    <fo:table-body>
        <fo:table-row>
            <fo:table-cell>
                <fo:block>
something
                </fo:block>
            </fo:table-cell>
        </fo:table-row>
        <fo:table-row>
            <fo:table-cell>
                <fo:block>
something
                </fo:block>
            </fo:table-cell>
        </fo:table-row>
    </fo:table-body>
</fo:table>

Это путь ?!Таблицы довольно стандартные, я думал, что html таблица может быть легко преобразована в xslt / xsl-fo.

Ответы [ 2 ]

5 голосов
/ 21 февраля 2011

Итак,

Чтобы решить мою проблему, я нашел статью IBM, объясняющую, что именно я пытался сделать: «Руководство по преобразованию HTML в объекты форматирования (FO)»

http://www.ibm.com/developerworks/library/x-xslfo2app/#table

Это довольно просто, но вам нужно иметь опыт, чтобы справиться с этим ... Я не очень благодарен вам, IBM.

3 голосов
/ 20 февраля 2011

Вы на правильном пути. Да, вам придется конвертировать элементы HTML в элементы XSL-FO. Движки XSL-FO читают XSL-FO, чтобы знать, как его отобразить, поэтому простое копирование элементов HTML (связанных с пространством имен HTML или без пространства имен) в файл XSL-FO не будет работать.

Взгляните на HTML2FO . Это может удовлетворить большинство ваших потребностей.

...