23
ПРИНЦИПЫ ФОРМИРОВАНИЯ ТЕКСТОВЫХ ДОКУМЕНТОВ НА ОСНОВЕ ШАБЛОНОВ ИСПОЛЬЗУЯ FILEMAKER Перла Аркадий ТриАПринт

Перла А. Принципы формирования текстовых документов из FileMaker

  • Upload
    fmteam

  • View
    410

  • Download
    13

Embed Size (px)

Citation preview

Page 1: Перла А. Принципы формирования текстовых документов из FileMaker

ПРИНЦИПЫ ФОРМИРОВАНИЯ ТЕКСТОВЫХ ДОКУМЕНТОВ НА ОСНОВЕ ШАБЛОНОВ ИСПОЛЬЗУЯ FILEMAKERПерла АркадийТриАПринт

Page 2: Перла А. Принципы формирования текстовых документов из FileMaker

В процессе разработки приложений FM, экспорт данных в виде оформленного документа на основе данных из проекта часто встречающася задача.

Мы будем рассматривать эту задачу на примере формирования текста договоров.

Форматы файлов которые мы будем получать: PDF, RTF, DOCX.

.PDF

.RTF

.DOCX

Старый формат .DOC считается устарвешим и неудобным

Page 3: Перла А. Принципы формирования текстовых документов из FileMaker

Основной принцип при формировании документа – использование шаблона, с последующей заменой ключевых слов в шаблоне на текст из базы данных FileMaker

Лайот для редактирования данных документа

Шаблон документа Полученный документ

Page 4: Перла А. Принципы формирования текстовых документов из FileMaker

Вариант PDF

Пример формирования многостраничного договора на основе двуязычного шаблона с подстановкой всех необходимых

реквизитов на основе одного из реализованных проектов …

Пользователю, в действительности, не всегда нужен именно редактируемый текстовый файл, а нужен способ корректно сформровать документа, подставив туда все необходимые данные из базы. А финальный файл документа может быть и не редактируемым. Часто это даже лучше, так как страхует, от случайной правки и «поехавшего» форматирования, в случае использования разных версий редакторов.

Лирическое отступление:

Page 5: Перла А. Принципы формирования текстовых документов из FileMaker

В настройках проекта формируются шаблоны документов.

Каждый шаблон это набор записей, где каждая запись это один пунктов договора.

Пользователь в необходимых местах проставляет ключевые слова, которые будут заменены реальными данными при формировании документа

Page 6: Перла А. Принципы формирования текстовых документов из FileMaker

Карточка договора

Пользователь заносит основные данные о договоре и формирует договор выбирая шаблон из списка.

При необходимости он может внести корректировки в текст договора, добавить новые или удалить ненужные пункты (шаблон при это не затрагивается).

Когда все готово, осталось только открыть печатную форму договора, распечатать или сохранить как pdf…

Page 7: Перла А. Принципы формирования текстовых документов из FileMaker

Лаойт печтаной формы выводится в режиме списка и основан на таблице пунктов договора.

Размер поля (и body) сделан очень большим «с запасом», чтобы даже достаточно длинные тексты пунктов договора умещались. При этом настроены свойства Sliding up для схлопования пунктов.

Двуязачность реализована с помощью репетишен полей

Page 8: Перла А. Принципы формирования текстовых документов из FileMaker

Таблица contracts_row (пункты договора) содержит калькулируемое поле text_calc которое подставляет в текст пункта договора соотвествующиз значения вместо ключевых слов, используя функцию Subsitute

В показанном примере пользователь может меняь местами покпателя и поставщика поэтому в калькуляции присутствует if

Page 9: Перла А. Принципы формирования текстовых документов из FileMaker

Варинты экспорта в RTF и DOCX рассматриваются на оснвое специального подготовленного файла примера

CreateDocsSample.fmp12

Page 10: Перла А. Принципы формирования текстовых документов из FileMaker

Из добавленых шаблонов выбираем нужный и нажимаем сформировать

Полученный документ появляется в конейнере

Шаблон документа с ключевыми словами

Полученный документ с подставленными данными

Page 11: Перла А. Принципы формирования текстовых документов из FileMaker

Экспортируем файл шаблона

на диск из контейнера

Читаем текст документа

Заменяем в тексте

ключевые слова из базы

данных

Записываем текст обратно в

файл

Импортируем новый файл в базу данных

Основной принцип формирования документа из шаблона

Процесс извелечения текста из файла шалона и записи обратно зависит от формата файла.

Собственно, в этом заключается наша главная задача…

Page 12: Перла А. Принципы формирования текстовых документов из FileMaker

«Внутри» RTF это текстовый файл, где сам текст документа перемежается управляющими коммандами. Используемые нами ключевые слова в нем легко находятся.

Page 13: Перла А. Принципы формирования текстовых документов из FileMaker

Основная проблема c RTF, что русский текст (и любой, кроме английского) передается в RTF в виде последовательности UNICODE кодов, снабженных специальными резделителями: \u перед кодом идва пробела после.

Нам нужна специальная custom-функция для перекодировки текста.

Let ([Symbol = Left ( text ; 1 );kod = Code ( Symbol )];

// если код символа больше 127 то преобразуем иначе оставляем как есть (англ буквы и стандартные символы)

If ( kod > 127; "\u" & kod & " " ; Symbol )& If ( Length ( text ) > 1; text_to_RTF ( Right ( text ; Length ( text )-1 ) ); "")

)

Page 14: Перла А. Принципы формирования текстовых документов из FileMaker

Для работы с файлами на чтение и запись используем бесплатный плагин BaseElement (http://www.goya.com.au/baseelements/plugin )

При работе BaseElement использует формат пути к файлу отличный от принятого в FileMaker. Формат пути также отличатется в зависимости от платформы (mac или win) поэтому для пути файлов мы используем отдельные переменные постфиксом BE

Page 15: Перла А. Принципы формирования текстовых документов из FileMaker

Теперь попробуем зайти в джунгли формата word – docx…

Page 16: Перла А. Принципы формирования текстовых документов из FileMaker

DOCX – это сжатая zip папка содержащая несколько подпапок и файлов

В этом мы можем легко убедится переименовав любой docx файл в zip и распоковав его

Page 17: Перла А. Принципы формирования текстовых документов из FileMaker

Количество файлов в папке может отличаться, но нас всегда интересует файл document.xml - он содержит основной текст документа.

Колонтитутулы и футеры хранятся в отдельных файлах. Их может быть несколько в зависимости от их количества в документе.Например: header1.xmlheader2.xmlfooter1.xmlfooter2.xmlи т.п.

Page 18: Перла А. Принципы формирования текстовых документов из FileMaker

Пример document.xml

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

Page 19: Перла А. Принципы формирования текстовых документов из FileMaker

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

Page 20: Перла А. Принципы формирования текстовых документов из FileMaker

Вторая часть скрипта. Замещаем ключевые слова данными, записываем файлы обратно, zip-ем папку, как docx файл и помещаем его в контейнер.

Page 21: Перла А. Принципы формирования текстовых документов из FileMaker

Особенность работы функции BE_Zip плагина BaseElement не позволяет корректно упаковать zip файл в windows, чтобы он нормально открывался в word (получается направильная структура архива).

Поэтому для win мы используем архиватор коммандной строки 7za.

Page 22: Перла А. Принципы формирования текстовых документов из FileMaker

Ключевые слова не обязательно жестко прописывать в срипте. В CreateDocsSample ключевые слова прописываются специальное поле с репетишен template_keywords, подставляемые значения в поле template_field_name. На основе этих полей формируется поля-калькуляуции template_formulas (для docx) и template_formulas_rtf (для rtf)

Значения параметров для функции Substitute замены формируется на осове функции List (template_formulas). Полученное выражение вычисляется с помощью EvaluateТаким образом мы получаем возможность замены и добавления ключевых слов и их значений без редактирования скрипта обработки. Мы можем указать не только наименования полей, но любые функции FM

В реальных проектах рекомендуется вместо репетишен использовать отдельную таблицу ключевых слов

Page 23: Перла А. Принципы формирования текстовых документов из FileMaker

Спасибо за внимание!

Вопросы?