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

Для реализации такого документа в шаблоне можно заранее определить отдельные возможные строки таблицы, дать им имя, а затем из этих строк собирать таблицу так же, как бусинки насаживаются на нить, как нити укладываются слой за слоем в ткань с требуемым узором.
В процессе генерации эти вспомагательные строки удаляются из документа. Какая именно строка должна быть вставлена в документ определяется по ее имени. Именованная строка не обязательно должна быть строкой таблицы, это может быть текст с нужными атрибутами отображения.

Таким образом можно собрать документ, где текст чередуется с разнообразными таблицами. В шаблоне задается помимо именованных строк место, откуда начинается построчная печать. Задача программиста в данном случае сводится к формированию XML, в котором помимо данных будет указано, какой строкой их отображать. Т.о. достигается почти полное (только имя строки задает формат) разделение данных от их представления. И что приятно, имена строк могут быть осмысленными, а генерация происходит быстро.

В заключение хочу добавить, что мест в шаблоне, куда надо впечатывать строки с данными, может быть несколько. Каждое место имеет свое имя (идентификатор). В XML с входными данными необходимо передавать в определенном тэге это имя перед тем как печатать строка за строкой данные. Естественно, данные для печати должны быть отсортированы в порядке следования строк.

Комментарии (14)


  1. staticlab
    28.08.2017 22:02
    +1

    Вы бы хоть пример привели.


  1. sHinE
    28.08.2017 23:02
    +2

    Очень надеюсь, что это пример работы какого-нибудь инскуственного интеллекта :-D


    1. PennyLane Автор
      02.09.2017 10:30

      Эта статья — попытка на пальцах рассказать о проблемах генерации документов.Естественно, описание опирается на существующую систему генерации.


      1. staticlab
        02.09.2017 10:56

        Извините, но вы ни проблем не привели, ни предложили что-то конкретное. Чем текущие системы шаблонизации не устраивают?


  1. pavelpromin
    28.08.2017 23:29
    +2

    Это чё?! Толстая затравочка к xslt?!


  1. x893
    28.08.2017 23:59

    winword это же лет как 10 умеет.
    Да и генератор из winword xml с нужными данными — два-три занимает в реализации.
    Какие то абстракные рассуждения ни о чем.


  1. AlexZaharow
    29.08.2017 00:19

    Надеюсь, что настанет тот день, когда можно будет совмещать документ word и данные, без программирования )))


    1. PennyLane Автор
      02.09.2017 10:37

      На данный момент всю разметку шаблонов и диалоги по вводу информации делают сотрудники Бэк офиса (без IT). А вот заполнение полей из БД требует программирования. Но это относится только к новым полям, которые еще не запрограммированы программистом. Спустя определенное время, большинство полей заполняется автоматически и поэтому ваша надежда близка к реализаци. К сожалению, для новых полей я не вижу возможности убрать программирование.


  1. norguhtar
    29.08.2017 09:54
    +1

    Генерация документа ничем не отличается от генерации веб-страницы. MVC модель отлично тут работает. Как и собственно разметка шаблонизаторов. К примеру xdocreport поддерживает аж два шаблонизатора velocity и freemaker


    1. PennyLane Автор
      02.09.2017 10:47

      Отличие в том, что: 1.результат будет в MS Word или Excel. 2.Документы могут быть более 100 страниц и генерация их должна происходить быстро. 3.Должно быть минимальное участие сотрудников IT, т.к. документы нужны бизнесу и очень удобно, когда бизнес сам для себя делает документы.


  1. michael_vostrikov
    30.08.2017 02:29

    Прочитайте уже книжку по PHP и перестаньте писать ерунду


    1. PennyLane Автор
      02.09.2017 10:58

      Чтение книг, это очень важно. Очень. Однако еще важнее при чтении понимать смысл прочитанного, а не слушать свой внутренний голос. Если бы вы реально видели то, что назвали ерундой, то, возможно, вы бы перестали так легко бросать слова на ветер. Такие слова как Хрень, дребедень, ерунда -это не из словаря ИТишника. Стив Джобс так не выражался. И Линус Торвальдс.


      1. staticlab
        02.09.2017 11:07
        +1

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

        Так покажите же нам, откройте глаза, а не балабольте.


        Стив Джобс так не выражался. И Линус Торвальдс.

        Думается, что как раз эти ребята могли выражаться ещё грубее.


      1. michael_vostrikov
        02.09.2017 16:42

        Я сужу по описанию в вашей статье. Что вам мешало показать в ней то, что я назвал ерундой? А описана у вас самая обычная шаблонизация, из которой вы почему-то сделали проблему.


        Такие слова как Хрень, дребедень, ерунда -это не из словаря ИТишника.

        А где в вашей статье ИТ-детали? Нет, такие умные слова как "XML" или "шаблон" не являются техническими деталями. Вы просто сказали, что они у вас есть, но не показали, как они используются. Нет ИТ-информации, значит и обсуждать из этой области нечего.


        Стив Джобс так не выражался.

        Тут вот написано, что он иногда и посильнее выражался.