Доброго времени суток!
Есть необходимость экспортировать из полей в шаблон MS Word. google привел к livedocx но спустя время я не могу туда логиниться и соответственно не могу работать с шаблоном. Возможно есть другое, более стабильное решение моей задачи?
Заранее спасибо)
Комментарии
https://drupal.org/project/views_data_export
Есть phpword, если речь идет именно о поиске бесплатной библиотеки.
Уже теплее) Спасибо) А вы подключали эту библиотеку к Drupal? Если да то как?
Ага, подключал.
Создается шаблон (docx, в моем случае).
Пишется модуль, в котором надо кидать данные в документ.
В коде модуля в нужном месте - например, в хуке hook_node_presave() - подключается библиотека, создается объект нужного класса из библиотеки, открывается шаблон, нужные поля кидаются в шаблон, все это сохраняется в файл. Примеры есть в описании библиотеки, там все прозрачно.
Разве что если кракозябры в документе результирующем полезут, надо будет подправить перекодировку в utf8, она там глючная была раньше, если версию новую не выпустили - то такой и осталась.
я ни разу не писал модули. можно как ни будт использовать с rules? там по условию можно выполнить php-код.
А без разницы, код почти один и тот же будет, только с модулем удобнее работать, чем с окошком в rules.
Как Вы и сказали возникли проблемы с кодировкой. Это исправлять в самом шаблоне word?
Это в коде библиотеки. Погуглите, известная проблема, там в паре мест надо utf8_encode() удалить, или что-то типа того.
Понял, спасибо!
Появилась новая ошибка)
Данные вставляются в пустую строчку, а когда нужно вставить в текст - не получается.
У Вас возникала такая проблема?
В чем может быть проблема?
Поставьте модуль devel.
dpm($document);
сразу после создания класса что показывает?
dpm($document); ставить в теле моего модуля?
Доброй ночи! Простите что так настырно прошу помощи))
Появилась новая ошибка при использовании 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
Заранее благодарен за помощь!)))?>
Функция dpm() модуля devel - один из важнейших инструментов отладки, используется для вывода быстрого дампа объектов, массивов, переменных.
После вызова loadTemplate() поставьте
dpm($document);
и даже
return ;
чтоб код дальше не выполнялся. Посмотрите, что внутри объекта $document. Если там ничего, значит вам не удалось загрузить темплейт.
Сделал так:
<?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).
параметр пропустил
function word_node_presave($node)
Без изменений.
ну это я между делом сказал , а по поводу объекта , так он просто файл не находит
Все работает)))
Когда делал то же самое при помощи рулс не мог вставить значение в текст. В пустую строку вставлялось, а в текст нет.
А, вспомнил, вдруг поможет.
Если есть такой косяк, что PHPWord нормально заменяет шаблоны, если они на отдельной строке, но не заменяет - если они в тексте, то объясняю.
Шаблоны эти докиксовые - очень капризны. Крайне нежелательно после вставки шаблонов в документ и сохранения, редактировать этот документ. Кроме того. Если у вас есть шаблоны типа {MY_TEMPLATE} или %%MY_TEMPLATE%% или еще какие-нибудь символы, то docx может при сохранении взять и превратить эти шаблоны вот в такое: %<font 14(например)>%MY_TEMPLATE</font>%% - и вы об этом не узнаете. И работать не будет. Единственный способ отловить - открыть шаблон docx как зип-архив (ага, так можно), найти в нём документ и отредактировать его emacs-ом (лучше всего, именно им, да). С помощью имакса (в байтовом режиме, или как там его) - найти все шаблоны и проверить, не кривые ли они, и если кривые - исправить, т.е. прямо переставить символы так чтоб шаблон без "разрывов" был. Сохранить, и после этого шаблон больше в ворде не открывать. Вот такая магия.
В инете где-то про это даже статья была, но щас так сразу не найду.
А если использовать PDF? Мне по сути все ровно в как виде выодить: pdf или docx. Документ просто будет печататься. Погуглил и нашел несколько статей по работе php и pdf. пока не нашео ничего по использованию шаблонов ${tmplate}