Анонс OpenSource библиотеки для создания и изменения...

Post on 16-Jun-2015

1.273 views 3 download

description

Библиотека предназначена для генерации документов по шаблону и внесение изменений в существующие документы. С помощью библиотеки вы сможете отказаться от редактирования OpenXML-дерева через OpenXML SDK и перейти к механизму построения структуры документа из метаэлементов в декларативном виде. Будут приведены примеры использования в классе решаемых задач: создание параграфов, создание и заполнение тегов, списков, таблиц и т.п. Тимур затронет вопросы о лицензировании библиотеки. Проект будет выложен на Google Code по адресу http://code.google.com/p/fluent-openxml По материалам конференции .NET разработчиков http://www.dotnetconf.ru/Materialy/Anons_opensource_bibliteki_dlya_openxml

Transcript of Анонс OpenSource библиотеки для создания и изменения...

Анонс OpenSource библиотеки для создания и изменения документов в

формате OpenXml через Fluent-интерфейс

Тимур РахматиллаевIndyCode

twitter.com/eskat0n

Вторая конференция .NET разработчиков

Пользовательский сценарий

Генерация документа

Шаблон

Пользователь скачивает документ

Пользователь редактирует документ

Документ закачивается на сервер

Обновление некоторых значений

в документе

Требования

• Генерация документа со сложным форматированием по шаблону

• Подстановка значений в обновляемые поля• Возможность защиты документа (или его

частей) от редактирования

Содержимое документа нужновставлять вместо или внутрь

специальных меток, заданных в шаблоне

Tags

Показ скрытых символов

Tags

Тег

Тег – скрытая метка-параграф, внутрь которой можно вставить объемлющий элемент документа:

• Параграф• Список• Таблицу

и т.д.

Placeholders

Placeholders

Placeholder

Placeholder – скрытая метка внутри параграфа, внутрь которой можно вставить блок текста

Запрет редактирования

Запрет редактирования

MS Word via COM Interop

Приложение

COM объект

Трудности

Приложение

COM объект

Имя им – Легион

MS Word – лишний

Пожирание денег

So slow

• 2 – 5 мин на генерацию документа• Потери времени на запуск и закрытие приложения MS Word

OpenXML SDK

Формат OpenXML

• Дерево с элементами самоподобия• Используется иерархическая агрегация

Достоинства OpenXML SDK

• MS Word не используется• Высокая скорость работы• Работа с телом документа с

меньшим уровнем абстракции• Возможность построения более

гибкого API

Божественный классpublic interface IDocxDocument {

void CleanContent(string tagName); void Replace(string singleTagName, string newValue); void Replace(string tagName, IEnumerable<TextBlock> content); void Replace(IEnumerable<KeyValuePair<string, string>> replacements);OpenXmlElement GetParagraph(string formattedName); TagReplacer GetTagReplacer(string name); bool ExistsUniqueTagWithInnerText(string text); byte[] ToArray(); void Unprotect(); void Protect(); void SetProtectionAttribute(string value); void SetCustomProperty(string name, string value); string GetCustomProperty(string name);

и еще 16 методов!

Почему Fluent?

Fluent – это

• Декларативное задание желаемой структуры документа• Уменьшение числа методов• Низкий порог вхождения• Модно

Пример использования

var builder = new DocxDocumentBuilder(document);  

builder .Tag("MAIN_CONTENT", x => x

.EditableStart() .Indent.Paragraph("Тестовый 1") .Indent.Paragraph("Тестовый 2") .EditableEnd());

Теги и placeholder’ы можно вставлять в документ в runtime

Поддержка форматирования

• Атрибуты текста• Выравнивание параграфов• Отступы• Таблицы с настраиваемым видом• Нумерованные списки

Области применения

• Создание договоров, выписок, бланков, отчетной документации• Системы электронного

документооборота• Бухгалтерские системы

Демонстрация

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

Тимур РахматиллаевIndyCode

timur.rakhmatillaev@indycode.rutwitter.com/eskat0n