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

Fluent OpenXML - Foxby

Embed Size (px)

DESCRIPTION

Слайды презентации к докладу "Анонс OpenSource библиотеки для создания и изменения документов в формате OpenXml через Fluent-интерфейс" со второй конферции .NETConf

Citation preview

Page 1: Fluent OpenXML - Foxby

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

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

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

twitter.com/eskat0n

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

Page 2: Fluent OpenXML - Foxby

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

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

Шаблон

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

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

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

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

в документе

Page 3: Fluent OpenXML - Foxby

Требования

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

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

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

Page 4: Fluent OpenXML - Foxby

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

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

Page 5: Fluent OpenXML - Foxby

Tags

Page 6: Fluent OpenXML - Foxby

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

Page 7: Fluent OpenXML - Foxby

Tags

Page 8: Fluent OpenXML - Foxby

Тег

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

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

и т.д.

Page 9: Fluent OpenXML - Foxby

Placeholders

Page 10: Fluent OpenXML - Foxby

Placeholders

Page 11: Fluent OpenXML - Foxby

Placeholder

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

Page 12: Fluent OpenXML - Foxby

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

Page 13: Fluent OpenXML - Foxby

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

Page 14: Fluent OpenXML - Foxby

MS Word via COM Interop

Приложение

COM объект

Page 15: Fluent OpenXML - Foxby

Трудности

Приложение

COM объект

Page 16: Fluent OpenXML - Foxby

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

Page 17: Fluent OpenXML - Foxby

MS Word – лишний

Page 18: Fluent OpenXML - Foxby

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

Page 19: Fluent OpenXML - Foxby

So slow

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

Page 20: Fluent OpenXML - Foxby

OpenXML SDK

Page 21: Fluent OpenXML - Foxby

Формат OpenXML

Page 22: Fluent OpenXML - Foxby

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

Page 23: Fluent OpenXML - Foxby
Page 24: Fluent OpenXML - Foxby

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

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

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

гибкого API

Page 25: Fluent OpenXML - Foxby

Божественный класс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: Fluent OpenXML - Foxby

Почему Fluent?

Page 27: Fluent OpenXML - Foxby

Fluent – это

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

Page 28: Fluent OpenXML - Foxby

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

var builder = new DocxDocumentBuilder(document);  

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

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

Page 29: Fluent OpenXML - Foxby

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

Page 30: Fluent OpenXML - Foxby

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

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

Page 31: Fluent OpenXML - Foxby

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

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

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

Page 32: Fluent OpenXML - Foxby

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

Page 34: Fluent OpenXML - Foxby

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

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

[email protected]/eskat0n