Экспорт занчений полей в шаблон MS WORD

Главные вкладки

Аватар пользователя DJLocksmith DJLocksmith 24 декабря 2013 в 21:53

Доброго времени суток!
Есть необходимость экспортировать из полей в шаблон MS Word. google привел к livedocx но спустя время я не могу туда логиниться и соответственно не могу работать с шаблоном. Возможно есть другое, более стабильное решение моей задачи?
Заранее спасибо)

Комментарии

Аватар пользователя DJLocksmith DJLocksmith 24 декабря 2013 в 22:43

graker wrote:
Есть phpword, если речь идет именно о поиске бесплатной библиотеки.

Уже теплее) Спасибо) А вы подключали эту библиотеку к Drupal? Если да то как?

Аватар пользователя graker graker 24 декабря 2013 в 23:05

Ага, подключал.
Создается шаблон (docx, в моем случае).
Пишется модуль, в котором надо кидать данные в документ.
В коде модуля в нужном месте - например, в хуке hook_node_presave() - подключается библиотека, создается объект нужного класса из библиотеки, открывается шаблон, нужные поля кидаются в шаблон, все это сохраняется в файл. Примеры есть в описании библиотеки, там все прозрачно.

Разве что если кракозябры в документе результирующем полезут, надо будет подправить перекодировку в utf8, она там глючная была раньше, если версию новую не выпустили - то такой и осталась.

Аватар пользователя DJLocksmith DJLocksmith 24 декабря 2013 в 23:33

graker wrote:
Ага, подключал.
Создается шаблон (docx, в моем случае).
Пишется модуль, в котором надо кидать данные в документ.
В коде модуля в нужном месте - например, в хуке hook_node_presave() - подключается библиотека, создается объект нужного класса из библиотеки, открывается шаблон, нужные поля кидаются в шаблон, все это сохраняется в файл. Примеры есть в описании библиотеки, там все прозрачно.

Разве что если кракозябры в документе результирующем полезут, надо будет подправить перекодировку в utf8, она там глючная была раньше, если версию новую не выпустили - то такой и осталась.

я ни разу не писал модули. можно как ни будт использовать с rules? там по условию можно выполнить php-код.

Аватар пользователя graker graker 25 декабря 2013 в 0:51

А без разницы, код почти один и тот же будет, только с модулем удобнее работать, чем с окошком в rules.

Аватар пользователя DJLocksmith DJLocksmith 25 декабря 2013 в 12:56

graker wrote:
А без разницы, код почти один и тот же будет, только с модулем удобнее работать, чем с окошком в rules.

Как Вы и сказали возникли проблемы с кодировкой. Это исправлять в самом шаблоне word?

Аватар пользователя graker graker 26 декабря 2013 в 1:14

Это в коде библиотеки. Погуглите, известная проблема, там в паре мест надо utf8_encode() удалить, или что-то типа того.

Аватар пользователя DJLocksmith DJLocksmith 26 декабря 2013 в 13:10

graker wrote:
Это в коде библиотеки. Погуглите, известная проблема, там в паре мест надо utf8_encode() удалить, или что-то типа того.

Понял, спасибо!

Аватар пользователя DJLocksmith DJLocksmith 26 декабря 2013 в 17:05

Появилась новая ошибка)
Данные вставляются в пустую строчку, а когда нужно вставить в текст - не получается.
У Вас возникала такая проблема?
В чем может быть проблема?

Аватар пользователя DJLocksmith DJLocksmith 27 декабря 2013 в 0:01

graker wrote:
Поставьте модуль devel.
dpm($document);
сразу после создания класса что показывает?

dpm($document); ставить в теле моего модуля?

Аватар пользователя DJLocksmith DJLocksmith 26 декабря 2013 в 23:59

Доброй ночи! Простите что так настырно прошу помощи))
Появилась новая ошибка при использовании rules)
Данные вставляются в пустую строчку, а когда нужно вставить в текст - не получается.
У Вас возникала такая проблема?
В чем может быть проблема?
Последовал Вашему совету и начал разбираться с созданием модуля. для вставки значений использую хук node_presave
это содержимое файла word.module из созданного мною модуля
<?php
function word_node_presave() {
require_once '/home/ho4uappc/public_html/sites/default/files/PHPWord/PHPWord.php';
$PHPWord = new PHPWord();

$document = $PHPWord->loadTemplate('/home/ho4uappc/public_htmlsites/default/files/templates/foreign.docx');
$document->setValue('lastnameua', $node->field_lastname_ua['und'][0]['value']);
$document->setValue('nameua', $node->field_name_ua['und'][0]['value']);
$document->setValue('patronymicua', $node->field_patronymic_ua['und'][0]['value']);

$document->save('/home/ho4uappc/public_html/sites/default/files/templates/dogovor.docx');
}

когда сохраняю ноду получаю ошибку:
Fatal error: Call to a member function setValue() on a non-object in /home/ho4uappc/public_html/sites/all/modules/word/word.module on line 7

Заранее благодарен за помощь!)))?>

Аватар пользователя graker graker 27 декабря 2013 в 0:06

Функция dpm() модуля devel - один из важнейших инструментов отладки, используется для вывода быстрого дампа объектов, массивов, переменных.
После вызова loadTemplate() поставьте
dpm($document);
и даже
return ;
чтоб код дальше не выполнялся. Посмотрите, что внутри объекта $document. Если там ничего, значит вам не удалось загрузить темплейт.

Аватар пользователя DJLocksmith DJLocksmith 10 ноября 2015 в 11:49

Сделал так:

<?php
function word_node_presave() {

require_once '/home/ho4uappc/public_html/sites/default/files/PHPWord/PHPWord.php';

$PHPWord = new PHPWord();

$document = $PHPWord->loadTemplate('/home/ho4uappc/public_htmlsites/default/files/templates/Template.docx');
dpm($document);
return;
}
dpm ничего не показал + Warning: Invalid error type specified в функции PHPWord->loadTemplate() (строка 226 в файле /home/ho4uappc/public_html/sites/default/files/PHPWord/PHPWord.php).

Аватар пользователя drupby drupby 27 декабря 2013 в 0:33

"DJLocksmith" wrote:
Без изменений.

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

Аватар пользователя DJLocksmith DJLocksmith 27 декабря 2013 в 0:43

drupby wrote:
"DJLocksmith" wrote:
Без изменений.

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

Все работает)))

Когда делал то же самое при помощи рулс не мог вставить значение в текст. В пустую строку вставлялось, а в текст нет.

Аватар пользователя graker graker 27 декабря 2013 в 1:31

А, вспомнил, вдруг поможет.

Если есть такой косяк, что PHPWord нормально заменяет шаблоны, если они на отдельной строке, но не заменяет - если они в тексте, то объясняю.
Шаблоны эти докиксовые - очень капризны. Крайне нежелательно после вставки шаблонов в документ и сохранения, редактировать этот документ. Кроме того. Если у вас есть шаблоны типа {MY_TEMPLATE} или %%MY_TEMPLATE%% или еще какие-нибудь символы, то docx может при сохранении взять и превратить эти шаблоны вот в такое: %<font 14(например)>%MY_TEMPLATE</font>%% - и вы об этом не узнаете. И работать не будет. Единственный способ отловить - открыть шаблон docx как зип-архив (ага, так можно), найти в нём документ и отредактировать его emacs-ом (лучше всего, именно им, да). С помощью имакса (в байтовом режиме, или как там его) - найти все шаблоны и проверить, не кривые ли они, и если кривые - исправить, т.е. прямо переставить символы так чтоб шаблон без "разрывов" был. Сохранить, и после этого шаблон больше в ворде не открывать. Вот такая магия.

В инете где-то про это даже статья была, но щас так сразу не найду.

Аватар пользователя DJLocksmith DJLocksmith 4 января 2014 в 16:16

graker wrote:
А, вспомнил, вдруг поможет.

Если есть такой косяк, что PHPWord нормально заменяет шаблоны, если они на отдельной строке, но не заменяет - если они в тексте, то объясняю.
Шаблоны эти докиксовые - очень капризны. Крайне нежелательно после вставки шаблонов в документ и сохранения, редактировать этот документ. Кроме того. Если у вас есть шаблоны типа {MY_TEMPLATE} или %%MY_TEMPLATE%% или еще какие-нибудь символы, то docx может при сохранении взять и превратить эти шаблоны вот в такое: %<font 14(например)>%MY_TEMPLATE</font>%% - и вы об этом не узнаете. И работать не будет. Единственный способ отловить - открыть шаблон docx как зип-архив (ага, так можно), найти в нём документ и отредактировать его emacs-ом (лучше всего, именно им, да). С помощью имакса (в байтовом режиме, или как там его) - найти все шаблоны и проверить, не кривые ли они, и если кривые - исправить, т.е. прямо переставить символы так чтоб шаблон без "разрывов" был. Сохранить, и после этого шаблон больше в ворде не открывать. Вот такая магия.

В инете где-то про это даже статья была, но щас так сразу не найду.

А если использовать PDF? Мне по сути все ровно в как виде выодить: pdf или docx. Документ просто будет печататься. Погуглил и нашел несколько статей по работе php и pdf. пока не нашео ничего по использованию шаблонов ${tmplate}