Windward Core автоматизирует выпуск договоров, счетов, отчётов, писем, таблиц и презентаций из офисных шаблонов и данных. На Xeon Live можно скачать Windward Core бесплатно и свериться с кратким описанием продукта; ниже разберём не только назначение, но и практический рабочий процесс — от подключения данных и расстановки тегов до проверки PDF.
Windward Core — не обычный редактор PDF и не конструктор документов с отдельным визуальным холстом. Его базовая модель состоит из двух частей: Designer помогает подготовить шаблон в Microsoft Word, Excel или PowerPoint, а Engine объединяет этот шаблон с данными и формирует конечный файл. Такой подход удобен там, где макет должен оставаться привычным для сотрудников, но содержимое документа меняется от клиента к клиенту, от периода к периоду или от записи к записи.
Для пользователя это выглядит как работа с обычным офисным документом, в который добавлены специальные теги. Тег может вывести одно значение, повторить строку таблицы для набора данных, показать блок только при выполнении условия или импортировать внешний фрагмент. В результате оформление остаётся в шаблоне, а изменяемая часть приходит из базы, JSON, XML, OData и других поддерживаемых источников. Для понимания того, чем полученный PDF отличается от исходного офисного файла, полезен материал Xeon Live о том, как устроен формат PDF.
Designer отвечает за шаблон и бизнес-логику, которую видно прямо в документе: текст, таблицы, стили и графика остаются средствами Office, а теги определяют, какие данные подставлять и какие участки повторять или скрывать. Engine запускается уже на стороне приложения или сервера. Исторически Windward поставлял нативные движки для Java и .NET, а для других стеков использовал RESTful Engine. Это важное разделение: сотруднику, который правит макет, не требуется открывать код приложения, а разработчик не обязан вручную верстать каждую форму.
Преимущество архитектуры заметно на документах, которые часто меняют дизайн, но используют стабильный набор данных: страховых формах, выписках, коммерческих предложениях, актах, пакетах отчётности. Шаблон можно доработать в Office, сохранив действующие теги. Ограничение тоже очевидно: продукт ориентирован на системную автоматизацию и интеграцию, поэтому для разовой правки уже готового PDF он избыточен. Для такой задачи логичнее использовать обычный редактор PDF.
Windward Studios вошла в Apryse, а Windward Core стал одной из технологических основ платформы Fluent. В актуальной документации названия ленты и отдельных окон приведены уже для Fluent Designer, при этом архив прежних релизов Windward Core сохранён. Поэтому на старой установке названия и расположение отдельных элементов могут отличаться от свежих снимков экрана, но рабочая логика остаётся узнаваемой: источник данных → теги в шаблоне → предварительная проверка → Output. Ниже команды называются так, как они обозначены в действующей документации преемника; там, где новая функция появилась только в Fluent, это отмечено отдельно.
Перед созданием первого шаблона стоит один раз пройти по ленте Designer и понять, за что отвечает каждая группа. Это экономит время: большая часть операций сводится к нескольким повторяющимся действиям — подключить данные, поставить или выбрать тег, посмотреть его свойства, проверить возвращаемое значение и сформировать выходной документ.
Шаг 1. Откройте документ-шаблон в Word, Excel или PowerPoint и перейдите на вкладку Designer. В актуальном Fluent она называется Fluent. Шаг 2. Найдите группу Data. Команда Data Sources открывает Connection Editor, Input Parameters — окно параметров, вводимых перед формированием документа, Tag Tree — иерархию тегов. Шаг 3. Для нового шаблона начинайте именно с Data Sources: пока соединение не создано, инструменты выбора данных для тегов не дадут полезного результата.
Проверка. После соединения источник должен появиться среди активных подключений. Затем откройте Data Tree или Data Bin и убедитесь, что видите структуру таблиц, полей или узлов. Если дерево пустое, не переходите к разметке шаблона: сначала исправьте соединение или схему, иначе дальше придётся диагностировать каждый тег отдельно.
Шаг 1. Поставьте курсор в место, где должно появиться динамическое значение. Шаг 2. Откройте меню Tags и выберите нужный тип тега; для простого значения используется Out, для повторения — ForEach с EndForEach, для условия — If с EndIf и при необходимости Else. Шаг 3. После вставки используйте Select Tag, Edit Tag, Next и Previous, чтобы не искать элементы вручную по большому документу. Шаг 4. Если тег больше не нужен, сначала выделите именно его, затем применяйте Delete Tag — так меньше риск удалить соседний текст шаблона.
В старых материалах Windward те же идеи встречаются под брендом AutoTag/Designer. На практике полезно воспринимать тег не как текстовую метку, а как исполняемый элемент шаблона: он содержит ссылку на источник, выражение выбора данных и дополнительные свойства. Поэтому копирование видимого фрагмента тега без проверки его настроек может перенести не ту привязку к данным.
Шаг 1. Выберите уже существующий тег. Шаг 2. В группе Tag Properties проверьте Datasource — особенно когда шаблон объединяет несколько систем. Шаг 3. Откройте Data Tree или Choose Data и укажите поле или узел, который должен вернуть тег. Шаг 4. Для сложной выборки используйте Wizard, а затем Preview. Предварительный просмотр нужен до общего Output: он показывает, что возвращает конкретный тег, и отделяет проблемы данных от проблем вёрстки.
Проверка. Если Preview показывает ожидаемое значение, но общий документ выглядит неправильно, причина почти наверняка находится уже в размещении тегов, формате Office или настройках вывода. Если Preview пустой, возвращайтесь к Datasource, пути к данным и условиям самого тега. Такая последовательность резко сокращает количество одновременно проверяемых причин.
Шаг 1. Когда отдельные теги возвращают правильные данные, переходите в Toolbox. Шаг 2. Используйте служебные инструменты для проверки структуры, поиска повторяющихся элементов и работы с импортируемыми фрагментами. Шаг 3. Командой Output выберите формат и создайте тестовый документ. Шаг 4. Сравните результат не только визуально: проверьте количество строк в повторяющихся секциях, наличие условных блоков, формат дат и чисел, а для PDF — встроенные шрифты и разрывы страниц.
На этом этапе полезно держать тестовые данные с предсказуемыми крайними случаями: пустым значением, одной строкой, несколькими строками и длинным текстом. Красивый результат на одной идеальной записи ещё не означает, что шаблон устойчив к реальным данным.
Подключение данных — первый практический этап, где чаще всего проявляются проблемы окружения. Designer хранит сведения о соединениях и позволяет использовать несколько источников в одном шаблоне. В актуальном Connection Editor есть вкладка New для создания нового подключения, Connections для уже использованных соединений и отдельные возможности работы с источниками, настроенными в Fluent Manager.
Шаг 1. Откройте Data Sources → Data Sources, чтобы попасть в Connection Editor. Шаг 2. На вкладке New выберите JSON в группе Web/File. Шаг 3. Задайте понятное имя соединения. Оно особенно важно, если в одном шаблоне будет несколько источников: имя потом видно в свойствах тега. Шаг 4. Укажите файл или URL с JSON. Для веб-источника при необходимости выберите поддерживаемый протокол аутентификации; для локального файла проверьте, что путь доступен той среде, где работает Designer.
Шаг 5. Проверьте Encoding. Неверная кодировка обычно проявляется не как ошибка соединения, а как испорченный текст в данных. Шаг 6. Нажмите Add, затем Test. Только после успешного теста закрывайте редактор. Шаг 7. Откройте Data Bin или Data Tree и разверните корневой объект. Найдите поле, значение которого заранее известно в тестовом JSON. Шаг 8. Создайте временный Out, привяжите его к этому полю и выполните Preview. Если значение совпало с исходным файлом, соединение и путь к данным работают.
Что проверить при массиве. Если JSON содержит список объектов, одиночный Out не должен использоваться как замена циклу. Сначала определите массив как набор для ForEach, затем внутри области цикла обращайтесь к полям текущего элемента. Иначе в зависимости от выбранного пути вы получите только одно значение, пустой результат или неоднозначную выборку.
Шаг 1. В Connection Editor выберите нужный SQL-тип на вкладке New. Шаг 2. Заполните имя, провайдер, сервер и базу, затем способ авторизации и учётные данные. Шаг 3. Оставьте чтение метаданных включённым, когда планируете пользоваться SQL Wizard: метаданные помогают мастеру понимать таблицы, представления и связи. Шаг 4. Запустите Test. При ошибке не переходите к тегам — сначала подтвердите доступность сервера, полномочия учётной записи и наличие нужного ADO.NET-провайдера.
Шаг 5. После успешного подключения откройте SQL Wizard из свойства тега. В области Data выберите таблицы и поля. Перенесите нужные столбцы в Composition, задайте фильтрацию и сортировку, затем откройте Results. Шаг 6. Сверьте строки с тем, что ожидаете получить из базы. Шаг 7. Только после этого сохраняйте выражение в тег. Такой порядок предотвращает ситуацию, когда сложная выборка впервые проверяется уже внутри большого шаблона.
Шаг 1. Создайте каждое соединение отдельно и дайте им различимые имена. Шаг 2. Перед редактированием каждого тега смотрите поле Datasource, а не полагайтесь на последний открытый источник. Шаг 3. Для основной сущности — например, клиента — сформируйте внешний цикл или контекст. Шаг 4. Внутри него можно обращаться к другому источнику, используя значение текущей сущности как условие выборки. Windward поддерживает одновременную обработку нескольких источников, поэтому такая схема подходит, когда реквизиты клиента хранятся в одной системе, а операции — в другой.
Проверка. Сначала сделайте два независимых временных Out — по одному на каждый источник — и убедитесь, что они возвращают ожидаемые данные. Затем объединяйте их в общий блок. Если после объединения значения начинают пропадать, смотрите область действия циклов и переменных: источник может быть исправен, а контекст текущей строки уже изменился.
После подключения данных основной объём работы проходит внутри офисного документа. Сначала полезно построить минимальную версию шаблона: одно поле, одна повторяющаяся таблица и одно условие. После того как эта конструкция стабильно формируется, добавляйте оформление и дополнительные ветки. Такой порядок проще диагностировать, чем готовить сложный дизайн сразу.
Шаг 1. Поставьте курсор туда, где должно появиться значение: имя клиента, дата, итоговая сумма, название подразделения. Шаг 2. Добавьте тег Out. Шаг 3. В редакторе тега выберите Datasource и поле в дереве данных либо задайте путь в области Query редактора. Шаг 4. Нажмите Preview и убедитесь, что возвращается одно ожидаемое значение. Шаг 5. Настройте Format и Type только после того, как само значение уже правильно найдено.
Шаг 6. Для дат используйте формат, согласованный с остальным документом; для чисел и валюты не подменяйте числовой тип заранее сформированной строкой, иначе сортировка и расчёты становятся менее предсказуемыми. Шаг 7. Если поле может отсутствовать, задайте подходящее поведение и значение по умолчанию там, где это требуется бизнес-правилами. Проверка. Сформируйте результат на записи с заполненным и пустым полем и сравните оба случая.
Шаг 1. Подготовьте в Word таблицу с одной строкой-шаблоном для позиции счета, операции или сотрудника. Шаг 2. Перед повторяемой частью вставьте ForEach и укажите набор строк или узлов, по которому нужно пройти. Шаг 3. Внутри области цикла разместите Out для полей текущей строки — например, наименование, количество и сумму. Шаг 4. После последнего повторяемого элемента поставьте EndForEach. Граница цикла должна охватывать ровно тот фрагмент, который надо размножать.
Шаг 5. Нажмите Preview для самого ForEach или сформируйте короткий тестовый документ с тремя записями. Шаг 6. Проверьте, что заголовок таблицы не повторяется вместе с данными, если этого не требуется, а итоговая строка находится уже после EndForEach. Шаг 7. Проверьте нулевой набор: при отсутствии строк таблица не должна оставлять сломанные границы или лишний пустой абзац. Для сложных вложенных наборов добавляйте внутренний ForEach только после того, как внешний цикл работает отдельно.
Шаг 1. Сформулируйте условие в терминах данных: например, показывать город только когда поле не пусто, выводить альтернативный текст при отсутствии значения или включать раздел для определённого типа клиента. Шаг 2. Поместите If перед условным фрагментом и EndIf после него. Шаг 3. Укажите условие в редакторе и проверьте Preview. Шаг 4. Сформируйте документ на записи, где условие истинно, и убедитесь, что блок присутствует.
Шаг 5. Сформируйте второй документ на записи, где условие ложно. Если вместо скрытия нужен альтернативный текст, между If и EndIf добавьте Else и после него — альтернативную ветку. Шаг 6. Для вложенных условий двигайтесь от внутреннего к внешнему и следите за парностью закрывающих тегов. Проверка. В Tag Tree последовательность If/Else/EndIf должна быть логичной, а в конечном файле не должны появляться пустые строки или остатки оформления скрытого блока.
Шаг 1. Откройте Input Parameters из группы Data. Шаг 2. Нажмите Add и создайте параметр с понятным именем. Шаг 3. Укажите, обязателен ли он, выберите тип, задайте разумное значение по умолчанию и описание. Значение по умолчанию полезно не только пользователю: оно позволяет проверять связанные теги без постоянного ручного ввода. Шаг 4. Сохраните параметр и используйте его в условии или выборе данных.
Шаг 5. Запустите Output. Перед генерацией Designer покажет форму ввода параметров. Введите тестовое значение, для которого заранее знаете результат. Шаг 6. Повторите формирование с другим значением и сравните, меняется ли нужная часть документа. Шаг 7. Не используйте входной параметр как способ скрыть неверную привязку данных: сначала убедитесь, что без фильтрации источник доступен и возвращает корректный набор.
Готовый шаблон нужно проверять в два слоя. Первый слой — данные: что возвращает конкретный тег. Второй — выходной документ: как Office-разметка, теги и движок вместе выглядят в PDF, DOCX, XLSX, PPTX или другом поддерживаемом формате. Эти проверки нельзя объединять в одну, иначе ошибка в одном поле заставляет пересматривать весь документ.
Шаг 1. Выберите подозрительный тег и откройте его свойства. Шаг 2. Убедитесь, что выбран правильный Datasource. Шаг 3. Нажмите Preview. Для Out ожидайте одно значение, для ForEach — набор, соответствующий тестовым данным. Шаг 4. Если Preview не совпадает с ожидаемым, исправляйте выбор данных, фильтры или контекст до общего Output. Шаг 5. Если Preview корректен, запомните это как контрольную точку и переходите к проверке макета.
Такой способ особенно полезен при большом документе: одна и та же визуальная проблема — пустая ячейка — может означать как отсутствие данных, так и условие, которое скрыло блок, или неверную границу ForEach. Preview позволяет сразу исключить первый класс причин.
Шаг 1. Откройте Output и выберите формат, который реально будет использоваться в рабочем процессе. Один и тот же шаблон не следует оценивать только по DOCX, если конечный канал — PDF. Шаг 2. Для первого теста используйте небольшой, но репрезентативный набор данных. Шаг 3. После генерации откройте файл в целевом просмотрщике, а не только в Office. Шаг 4. Сверьте заголовки, номера страниц, повторяемые строки, изображения, диаграммы, переносы и условные разделы.
Шаг 5. Проверьте крайние варианты: длинное имя, длинный адресный блок без публикации физического адреса в тестовой статье, большое число строк, пустую коллекцию и отсутствующее необязательное поле. Шаг 6. Для PDF отдельно проверьте шрифты и переносы. В типовом просмотрщике можно открыть свойства документа и вкладку Fonts: это помогает заметить подмену шрифта сервером. Шаг 7. Если PDF требуется лишь создать без сложной автоматизации, сравните задачу с более простыми способами из инструкции как создать PDF-файл.
В Fluent версии 26 появилась команда Check Template, которой не следует приписывать старым сборкам Windward Core. Она полезна при миграции или работе на современной версии: шаг 1 — открыть Check Template; шаг 2 — выбрать целевой формат; шаг 3 — просмотреть Fluent Verify и исправить неподдерживаемые элементы, предупреждения и ошибки; шаг 4 — повторить проверку до чистого результата, затем уже делать Output.
Для постоянного контроля в текущем Fluent есть Verify Report On Generation в Options → Error Handling. Это удобно на этапе активной разработки шаблона, когда авторы часто меняют стили и объекты Office. После включения параметра стоит перезапустить Office, как указывает документация, и убедиться, что панель проверки появляется при формировании результата.
На небольшом договоре десяток тегов можно сопровождать вручную. На отчёте с несколькими источниками, вложенными циклами и повторяемыми блоками нужен другой подход: дерево тегов для навигации, Data Bin для обзора данных, SQL Wizard для построения выборок и PODs для повторного использования готовых фрагментов.
Шаг 1. Откройте Data Bin и используйте его как карту подключённых данных. Не переносите в шаблон первый похожий столбец: смотрите путь и источник. Шаг 2. При длинном документе откройте Tag Tree. Двойной переход к элементу позволяет быстрее найти тег и его редактор, чем прокрутка десятков страниц. Шаг 3. Перед серьёзным изменением структуры сохраните снимок Tag Tree в XML — эта функция предназначена для информационного анализа и помогает сравнить порядок тегов до и после переделки.
Шаг 4. После перемещения крупного блока снова откройте дерево и проверьте парность ForEach/EndForEach и If/EndIf. Шаг 5. Если в документе появились неожиданные повторения, ищите в дереве область, которая закрывается позже, чем планировалось. Проверка. Техническое XML-представление дерева полезно именно как карта структуры, но редактировать шаблон безопаснее через Designer, а не прямой правкой этого XML.
Шаг 1. Выберите тег, которому нужны данные из SQL, и откройте Wizard. Шаг 2. В Data найдите таблицы и нужные поля. Шаг 3. Перенесите поля в Composition и настройте порядок, фильтрацию и связи. Шаг 4. Откройте Results и проверьте реальные строки. Если строк слишком много или слишком мало, вернитесь к условиям, а не пытайтесь компенсировать ошибку в самом шаблоне.
Шаг 5. Сравните сформированный Select Statement с ожидаемой логикой, особенно при нескольких таблицах. Шаг 6. Сохраните выражение в тег и снова запустите Preview уже из контекста документа. Шаг 7. Для производственного шаблона избегайте выборки данных «на всякий случай»: чем меньше лишних строк и столбцов проходит через генератор, тем легче диагностировать результат и тем меньше ненужной работы выполняется на сервере.
Шаг 1. Выделите фрагмент, который действительно должен быть единым во многих шаблонах: стандартный раздел, таблицу, блок с тегами или корпоративный элемент. Шаг 2. Создайте POD по правилам вашей версии и разместите его в доступной библиотеке. Шаг 3. В другом шаблоне откройте POD Bin. Шаг 4. Перенесите нужный POD в документ и проверьте, сохранились ли его данные, переменные и оформление в выбранном режиме использования.
Шаг 5. Сформируйте документ и сравните вставленный фрагмент с эталонным. Шаг 6. Если POD связан с общим источником данных, проверьте, что в новом шаблоне есть соответствующее соединение и оно имеет ожидаемое имя. Шаг 7. Не превращайте POD в контейнер для уникальных фрагментов: смысл механизма — сокращать дублирование. Для обычного одноразового раздела проще оставить его частью шаблона.
Большинство сбоев удобно разделить на четыре группы: соединение с данными, выбор данных конкретным тегом, структура циклов и условий, различия между возможностями Office и выходного формата. Диагностика идёт в том же порядке. Начинать с переустановки или полной переделки шаблона почти никогда не рационально: сначала найдите самый маленький элемент, на котором ошибка воспроизводится.
Шаг 1. Откройте Connection Editor и проверьте, есть ли источник на вкладке Connections. Шаг 2. Для SQL-типа убедитесь, что на машине Designer установлен нужный ADO.NET-провайдер: документация прямо отмечает, что без него тип источника может не появиться в New. Шаг 3. Повторите Test с теми же данными подключения. Шаг 4. Если изменилось имя сервера, путь к файлу или учётная запись, исправьте соединение и сохраните его.
Шаг 5. Закройте и заново откройте шаблон, затем проверьте Datasource у одного известного тега. Шаг 6. Выполните Preview. Контроль. Ошибка считается устранённой только когда соединение проходит Test, дерево данных открывается и контрольный Out возвращает заранее известное значение. Один успешный Test без чтения данных ещё не подтверждает весь путь.
Шаг 1. Выделите тег и сравните его Datasource с ожидаемым. Шаг 2. Откройте выбор данных и проверьте путь. Шаг 3. Запустите Preview. Шаг 4. Если значение пустое, проверьте ту же запись непосредственно в тестовом JSON или базе. Шаг 5. Если данные существуют, временно упростите условие или фильтр тега до прямого выбора поля. Так станет понятно, проблема находится в доступе к данным или в логике отбора.
Шаг 6. После восстановления прямого значения возвращайте фильтры по одному и каждый раз запускайте Preview. Контроль. Финальный тест должен включать как минимум два набора: тот, где значение есть, и тот, где его нет. Для пустого поля поведение должно быть осознанным — скрытие, значение по умолчанию или ветка Else, а не случайный пустой фрагмент.
Шаг 1. Откройте Tag Tree. Шаг 2. Найдите проблемный ForEach или If и его закрывающий тег. Шаг 3. Убедитесь, что EndForEach/EndIf стоит сразу после действительно повторяемого или условного блока. Шаг 4. Для таблиц проверьте, не попал ли заголовок или строка итогов внутрь цикла. Шаг 5. Для вложенных условий временно отключайте внутренние ветки, пока внешний каркас не станет предсказуемым.
Шаг 6. Сформируйте документы на нулевом, одном и нескольких элементах. Это три разных теста: нулевой выявляет пустые остатки оформления, один — лишние заголовки и границы, несколько — ошибочную область повторения. Контроль. Число повторяющихся строк в результате должно совпадать с тестовым набором, а статические элементы должны появляться ровно один раз.
Шаг 1. Сформируйте одновременно редактируемый формат и PDF из одного набора данных. Шаг 2. Сравните расхождение: шрифт, перенос, изображение, таблица, диаграмма или объект Office. Шаг 3. Если проблема связана со шрифтом, проверьте его наличие в среде Engine и список шрифтов в итоговом PDF. Windward поддерживал настройку подстановки шрифтов, что особенно важно при серверной генерации. Шаг 4. Если проблема относится к сложному объекту Office, упростите только этот фрагмент и повторите вывод.
Шаг 5. В современном Fluent примените Check Template для конкретного формата. В старой версии Windward Core ориентируйтесь на Preview отдельных тегов, тестовый Output и документацию своей сборки. Шаг 6. После исправления заново проверьте не только проблемную страницу, но и соседние: изменение размера шрифта или объекта может сдвинуть разрывы. Контроль. Храните небольшой эталонный набор выходных файлов для регрессионного сравнения после обновления шаблона или Engine.
Windward Core силён там, где документ одновременно является офисным макетом и частью программного процесса. Он даёт бизнес-пользователю знакомую среду Word/Excel/PowerPoint, а разработчику — Engine, который можно встроить в приложение. Но это не универсальная замена редакторам PDF и не лучший выбор для каждого небольшого проекта.
Из реальных альтернатив по подходу стоит смотреть на Docmosis, DocuGenerate и сервисы PDF Generator API. У них другая модель развертывания и шаблонов, поэтому сравнивать стоит не число функций, а место, где живёт макет, способ подключения данных и требования к серверу. На Xeon Live есть отдельные материалы про Docmosis, DocuGenerate и PDF Generator API. Если нужен именно родственник Windward Core с централизованным управлением современного поколения, логично сравнить его с Windward Hub.
Практический выбор простой. Для автоматизированного выпуска большого числа документов с офисной версткой начинайте с маленького рабочего прототипа: одно соединение, один Out, один ForEach, один If и один конечный PDF. Только после устойчивого результата переносите в шаблон полный дизайн, дополнительные источники и повторно используемые фрагменты. Для разовой конвертации или ручной обработки PDF выбирайте более узкий инструмент: Windward Core раскрывается именно как часть постоянного процесса генерации.