Язык форматирования с плавающим элементом, похожим на div

У меня есть данные, хранящиеся в структурированном XML, которые я хочу сделать более читабельными, используя XSLT (или другую альтернативу). В целевом документе должно быть много экземпляров текста, выровненных как по левому, так и по правому краю одной и той же строки, и мне нужно иметь поведение, подобное div float:

<div style="float: left;">
  <p align=left>
    Left text. Left text. Left text. Left text. Left text. Left text. 
  </p>
</div>

<div style="float: right;">
  <p align=right>
    Right text. Right text. Right text. Right text. Right text. Right text. 
  </p>
</div>
<div style="clear: both;" />

Таким образом, когда длина обоих текстов превышает ширину контейнера, записывается DIV "Левый текст", а DIV "Правый текст" пишется НИЖЕ.

Я не могу использовать XSLT для создания HTML-файла, потому что он будет использоваться при печати, и мне также нужен язык, который имеет некоторую функцию "держать вместе" при разрывах страниц (если разрыв страницы происходит в середине элемента, он должен сломаться перед элементом). Наличие таблиц, поддерживающих автоматическое изменение размеров столбцов (например, таблицы HTML), было бы огромным плюсом, но не обязательно.

Я изучал XSL-FO, но не смог найти бесплатный рендер, поддерживающий эти функции. Я думал об использовании XSL для создания файла WordML, но я не нашел никаких руководств по нему. Иметь документ Word (или Open Office) было бы здорово, потому что я мог бы внести небольшие изменения. Также я рассматриваю возможность использования LaTex.

Что вы можете мне предложить?

РЕДАКТИРОВАТЬ: я проверял некоторые функции CSS, о которых я не знал (не сталкивался с этим в течение многих лет), и у него есть некоторые функции, связанные с печатью (page-break-inside: избежать, @page и т. Д.), Кроме наличия отличная поддержка поплавков и автоматическое расположение таблиц. Несмотря на то, что функции печати широко не поддерживаются, Opera и IE поддерживают его, и я провел несколько тестов в IE9, и он отрисовался очень хорошо. Поэтому я попробую XSLT с HTML/CSS, так как в нем есть все, что мне нужно, и у меня будет более плавная кривая обучения (я уже знаю немного CSS и уже много лет использую HTML).

2 ответа

Решение

Я думаю, что вы должны принять более общий подход к вашей проблеме, выбрав известную стандартную схему XML, такую ​​как DITA или DOCBOOK.

Преимущество этих схем состоит в том, что вы можете написать свой собственный XML и отобразить его так, как вам нужно, в соответствии с форматом вывода, который они поддерживают. Более того, они бесплатны, и вы можете легко получить PDF, RTF, WebHelp, HTML и т. Д., Если у вас есть правильные исходные документы.

Итак, вам необходимо:

  • принять решение, DITA или DOCBOOK?
  • написать transfrom, который получает ваш XML и преобразовать его в определенный стандартный DITA или DOCBOOK
  • выберите инструмент, который будет использоваться для управления выбранным вами стандартом, и протестируйте все выходные данные, которые вы можете получить из него, и посмотрите, какой из них подходит лучше.

Если вы выбрали DITA, у вас есть два бесплатных варианта:

  • Дита-OT
  • DITAC

Лично я бы пошел с DITA и DITA-OT, потому что он имеет гибкость плагинов на основе XSLT и пользовательских сборок на основе ANT. Но у обоих есть свои причины. Я начал с DITA-OT и закончил с использованием DITA-OT и DITAC.

Я не помещал здесь никаких ссылок, потому что вы можете легко найти то, что вам нужно, с помощью Google.


О ПОПЛАВКЕ

DITA-OT предоставляет специальный тип трансформации XSL-FO, который называется PDF2, а процессор XSL-FO - RenderX. RenderX в настоящее время поддерживает fo:float, так что я думаю, вы сможете найти свой путь. Возможно, вам потребуется переопределить какой-нибудь шаблон PDF2, что, безусловно, проще, чем реализация собственного преобразования PDF.

Обратите внимание, что RenderX возможен, если для вас приемлем водяной знак на каждой ноге. В противном случае вы должны потратить немного денег.

Я бы определенно придерживался XSL-FO и Apache Fop. Я был очень доволен результатами, которые мне удалось получить, и единственное, что я вижу, это борьба, когда кто-то думает, что это хорошая идея - попытаться заставить его создавать документы Word. Я никогда не видел, чтобы это дало хорошие результаты. Фактически, я был доволен результатами, которые он производит в формате PDF или PS.

Пожалуйста, опишите, как FOP не дотягивает до плаваний и разрывов страниц? Трудно понять, является ли это проблемой, специфичной для этих функций, или она была специфической для этих функций с выходным форматом Word/RTF/HTML.

Наконец, я бы избежал настройки в менталитете "работа / открытый офис". Если вы собираетесь автоматизировать создание документов, потратьте время на то, чтобы все было правильно, чтобы не было ручных действий.

Другие вопросы по тегам