Как передать документы/шаблоны Word 2010 (.docx) с данными из базы данных MySQL?

Как лучше всего заменить заполнители в документе .docx (Word 2010) данными, поступающими из базы данных MySQL?

Могу ли я просто открыть файл, используя язык на стороне сервера, и заменить строку для каждого заполнителя?

Есть ли какой-либо существующий инструмент/библиотека?

Спасибо


person Mirko    schedule 05.09.2012    source источник
comment
Сливается ли обычная почта Word?   -  person SLaks    schedule 05.09.2012
comment
Можете ли вы уточнить? Я думаю, это работает только для почты и базы данных Access   -  person Mirko    schedule 05.09.2012


Ответы (9)


Если вы хотите использовать PHP, наиболее полным доступным решением является PHPDocX.

Вы можете проверить в учебнике, как заменить переменные-заполнители данными, поступающими из любого источника данных (например, базы данных MySQL).

В частности, вы можете заполнять строки таблицы неопределенным количеством записей и можете удалять целые блоки документа Word в зависимости от данных, переданных в приложение, или строить динамические диаграммы Word.

Вы можете проверить доступную DEMO для простого, но довольно наглядного примера (его внутренняя работа объясняется в разделе учебника).

person Eduardo    schedule 05.09.2012

Раскрытие информации: я работаю в Invantive.

Использование Invantive Composition (http://www.invantive.com/products/invantive-composition ) вы можете заполнять документы Word (письма, исковые заявления, страховые полисы) данными из базы данных (IBM DB2, Oracle, MySQL, Teradata и SQL Server), а затем полностью изменять содержимое по желанию вручную. Он предназначен для реальных конечных пользователей Microsoft Word (как для тех, кто создает шаблон, так и для тех, кто его использует), которые получают доступ к базам данных через центральный веб-сервис и модели с запросами. Invantive Composition позволяет вкладывать повторяющиеся группы данных и компоновки. Интегрируется в Microsoft Word одним щелчком мыши.

В прошлом я лично также использовал JasperReports (http://community.jaspersoft.com/project/jasperreports-library) для создания писем с использованием цели вывода RTF JasperReports. Это бесплатно и отлично работает, если вы не хотите редактировать вывод более чем на несколько слов и имеете навыки разработки на Java/SQL. Как и Invantive Composition, он прекрасно работает с большим количеством различных отчетов.

Пока вы можете полностью контролировать среду, вы также можете рассмотреть возможность использования RTF в качестве промежуточного языка (не для конечных пользователей, а только для настоящих разработчиков). Сохраните документ в формате RTF, замените части текста, которые необходимо заменить, напишите веб-сервис, который принимает параметр и возвращает полученный RTF. Требуется некоторое время для создания более сложных таблиц (таблицы, очевидно, были изобретены человечеством после того, как была написана спецификация RTF :-) Этот подход работает только с очень ограниченным количеством шаблонов и когда у вас есть достаточно времени разработчика, чтобы поднять его и работает и стабилизируется.

Как независимый рецензент, я также видел случаи, когда использовались шаблоны XML, но результаты были не такими хорошими, как с JasperReports.

person Guido Leenders    schedule 24.10.2013

**Раскрытие информации: я руковожу проектом docx4j **

Доступно множество существующих инструментов/библиотек!

Да, вы можете просто заменить строку, но это ненадежный подход, поскольку Word может разделить строку на несколько прогонов.

Вы можете использовать MERGEFIELD или привязку данных управления контентом.

docx4j поддерживает все три подхода, но привязка данных управления содержимым является наиболее эффективной.

Особенно следует учитывать "повторы". Если вы хотите сказать строку таблицы в Word для каждой соответствующей строки в вашей таблице MySQL, вам нужен способ сделать это.

docx4j делает это с помощью элемента управления содержимым «повторить» вокруг строки таблицы; какое бы решение вы ни выбрали, я заранее позабочусь о том, чтобы оно могло обрабатывать повторы.

person JasonPlutext    schedule 05.09.2012
comment
Я использую решение docx4j и могу это подтвердить. Это очень быстро и очень легко реализовать, потому что предоставляется весь пример кода. Я опубликовал образец реализации docx4j в качестве веб-службы под названием docx4j-ws, чтобы проиллюстрировать, насколько просто взять их пример кода и реализовать его в виде веб-службы. Полностью работающий проект веб-сервиса можно найти здесь: github.com/sylnsr/docx4j-ws. Преимущество использования docx4j через веб-службу заключается в том, что клиент может быть написан на выбранном вами языке. - person StartupGuy; 23.07.2013

Вы можете использовать открытый Open XML SDK и заменить заполнители как это.

person Emmanuel N    schedule 05.09.2012

Раскрытие информации: я руковожу проектом docxgenjs

Я думаю, что вам не нужно кодировать все самостоятельно, поэтому я создал похожий на усы шаблонизатор для docx

Демо:

http://javascript-ninja.fr/docxgenjs/examples/demo.html

Репо

https://github.com/edi9999/docxgenjs

Он основан на JS и работает как на стороне клиента, так и на стороне сервера.

person edi9999    schedule 16.09.2013
comment
Я выбрал PHPDocX для этого проекта, но спасибо за это предложение;) - person Mirko; 16.09.2013

Да, для этого вы можете использовать серверный язык. Проверьте апач POI.

http://poi.apache.org

person lalborno    schedule 05.09.2012
comment
Почему я должен использовать интерфейс Java? - person Mirko; 06.09.2012

Здравствуйте, я прочитал комментарии выше, и Ivantive выглядит впечатляюще, но решение, которое мне было нужно, было намного проще. Используйте Selection.Range.InsertDatabase в Word для извлечения записей из базы данных Access, электронной таблицы Excel или даже просто другого документа Word. С помощью решения для доступа вы можете выбрать расположение записей для извлечения, и оно будет извлекать только определенные записи на основе поля (например, идентификатора). Погуглите приведенные выше слова, и вы найдете руководство MS и пример сценария VB. Хорошо сработал всего за несколько минут. Теперь ищем сценарий VB, который спрашивает человека, какой идентификатор он хочет от базы данных, и мы закончили.

person PassingItOn    schedule 20.12.2013

он использует шаблоны docx, которые имеют поля слияния с объектами java (объекты содержат информацию, которую вы загружаете из mysql или любого другого источника). Отчет xdoc представляет собой проект для языка java, домашняя страница проекта — https://code.google.com/p/xdocreport/.

person Eduardo Palacios    schedule 11.04.2014

*Раскрытие информации: я создаю проект templ4docx*

Привет

Вы можете использовать java-библиотеку templ4docx, которая находится в центральном репозитории maven, поэтому вы можете просто добавить ее в свои зависимости maven:

<dependency>
    <groupId>pl.jsolve</groupId>
    <artifactId>templ4docx</artifactId>
    <version>2.0.0</version>
</dependency>

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

    Docx docx = new Docx("E:\\template.docx");
    Variables variables = new Variables();
    variables.addTextVariable(new TextVariable("${firstName}", "John"));
    variables.addTextVariable(new TextVariable("${lastName}", "Sky"));
    docx.fillTemplate(variables);
    docx.save("E:\\filledTemplate.docx");

Более подробную информацию вы можете найти здесь: http://jsolve.github.io/java/templ4docx/

person lstypka    schedule 14.07.2015