Upload
alexander-byndyu
View
1.273
Download
3
Embed Size (px)
DESCRIPTION
Библиотека предназначена для генерации документов по шаблону и внесение изменений в существующие документы. С помощью библиотеки вы сможете отказаться от редактирования OpenXML-дерева через OpenXML SDK и перейти к механизму построения структуры документа из метаэлементов в декларативном виде. Будут приведены примеры использования в классе решаемых задач: создание параграфов, создание и заполнение тегов, списков, таблиц и т.п. Тимур затронет вопросы о лицензировании библиотеки. Проект будет выложен на Google Code по адресу http://code.google.com/p/fluent-openxml По материалам конференции .NET разработчиков http://www.dotnetconf.ru/Materialy/Anons_opensource_bibliteki_dlya_openxml
Citation preview
Анонс 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
Поддержка форматирования
• Атрибуты текста• Выравнивание параграфов• Отступы• Таблицы с настраиваемым видом• Нумерованные списки
Области применения
• Создание договоров, выписок, бланков, отчетной документации• Системы электронного
документооборота• Бухгалтерские системы
Демонстрация
code.google.com/p/fluent-openxml/Лицензия: GNU GPL v2