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

34
Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent- интерфейс Тимур Рахматиллаев IndyCode twitter.com/eskat0n Вторая конференция .NET разработчиков

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 библиотеки для создания и изменения...

Page 1: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

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

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

twitter.com/eskat0n

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

Page 2: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

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

Шаблон

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

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

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

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

в документе

Page 3: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

Требования

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

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

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

Page 4: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

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

Page 5: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

Tags

Page 6: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

Page 7: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

Tags

Page 8: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

Тег

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

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

и т.д.

Page 9: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

Placeholders

Page 10: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

Placeholders

Page 11: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

Placeholder

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

Page 12: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

Page 13: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

Page 14: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

MS Word via COM Interop

Приложение

COM объект

Page 15: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

Трудности

Приложение

COM объект

Page 16: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

Page 17: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

MS Word – лишний

Page 18: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

Page 19: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

So slow

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

Page 20: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

OpenXML SDK

Page 21: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

Формат OpenXML

Page 22: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

Page 23: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс
Page 24: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

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

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

гибкого API

Page 25: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

Божественный класс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 методов!

Page 26: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

Почему Fluent?

Page 27: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

Fluent – это

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

Page 28: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

var builder = new DocxDocumentBuilder(document);  

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

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

Page 29: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

Page 30: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

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

Page 31: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

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

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

Page 32: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

Page 34: Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс

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

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

[email protected]/eskat0n