Как уже отмечалось, в Ruby, похоже, нет библиотек для манипулирования документами Open XML, но OpenXML Developer имеет полную документацию по формату документов Open XML.
Если вы хотите отправить копию стандартного документа (например, письма формы), настроенного для каждого пользователя, это должно быть довольно просто, учитывая, что DOCX - это ZIP-файл, который содержит различные части в иерархии каталогов. Создайте «шаблон» DOCX, содержащий все части и древовидную структуру, которые вы хотите отправить all
пользователям (без реального содержимого), а затем просто создайте новые (или измените существующие) фрагменты, которые содержат пользовательский контент, который вы хотите и вставьте его в ZIP (файл DOCX) перед отправкой пользователю.
Например: у вас может быть document-template.xml
, который содержит Уважаемый [USER-PLACEHOLDER]: . Когда пользователь запрашивает документ, вы заменяете [USER-PLACEHOLDER]
на имя пользователя, затем добавляете полученный document.xml
в ZIP-файл your-template.docx
(который будет содержать все изображения и другие части, которые вы хотите в документе Word) и отправляете этот результирующий документ для пользователя.
Обратите внимание, что если вы переименуете файл .docx
в .zip
, будет просто исследовать структуру и формат частей внутри. Вы можете легко удалить или заменить изображения или другие детали с помощью любых инструментов для манипулирования ZIP или программным способом с помощью кода.
Создание совершенно нового документа Word с полностью настраиваемым содержимым из необработанного XML было бы очень затруднительным без доступа к API, чтобы упростить работу. Если вам действительно нужно это сделать, вы можете рассмотреть возможность установки Mono , а затем использовать VB.NET, C # или IronRuby для создания документов Open XML с помощью Open XML Format SDK 1,0 . Поскольку вы просто используете пространство имен Microsoft.Office.DocumentFormat.OpenXml.Packaging для манипулирования документами Open XML, оно должно нормально работать в Mono, который, кажется, поддерживает все, что требуется SDK.