Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
 Вывод данных в шаблон DOC с помощью PHP  [new]
bulaolen
Member

Откуда:
Сообщений: 15
Есть код, который работает с данными.
По итогу его работы, нужно массив данных передать в документ .doc, вставив в определенные пустые поля.
Как лучше подойти к решению вопроса? Создать пустой файл и пытаться в него с нуля записать и сами данные, и текст их окружающий (структура у текста сложная, это заявление)? Или есть какие-то специальные утилиты и команды, которые можно применить в этой ситуации?
12 окт 18, 13:32    [21702456]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных в шаблон DOC с помощью PHP  [new]
vkle
Member

Откуда: Самара
Сообщений: 14373
Более-менее честных путей, в общем-то, два.
1. Найти библиотеку, которая умеет делать желаемое. Желательно, без глюков. Однако, MS-вордовский .doc есть формат закрытый, потому, тут не слишком гладко.
2. Использовать нативный MS Word, взаимодействуя с ним через COM.
12 окт 18, 19:07    [21702873]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных в шаблон DOC с помощью PHP  [new]
xMailer
Member

Откуда:
Сообщений: 47
vkle
1. Найти библиотеку, которая умеет делать желаемое. Желательно, без глюков. Однако, MS-вордовский .doc есть формат закрытый, потому, тут не слишком гладко.

под Linux я так и не нашел
vkle
2. Использовать нативный MS Word, взаимодействуя с ним через COM.

Согласен, только при условии, что хост windows, не самый лучший способ на мой взгляд.

Тоже была такая задача, имею интерес. Есть лучшее native решение, это не doc, а rtf:
1. в rtf создадите шаблон такой же как и doc
2. шаблон прогнать через php class ekrtf (портированный ekrtf для delphi). При обработке шаблона работа ведется как с бинарником.
3. На выходе готовый отчет по шаблону.

Проблема в том, что нет порта ekrtf, я начинал, но так и не доделал. Обошелся созданием delphi intraweb с данным компонентом, который дергал curl-ом с параметрами из под linux хоста.
Если у ТС серьезный интерес, то у меня есть source delphi ekrtf, могу дать для портирования на php, естественно с обещанием выложить потом класс для всех.
15 окт 18, 09:08    [21703863]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных в шаблон DOC с помощью PHP  [new]
SQLPowerUser
Member

Откуда: ссылка в профиле
Сообщений: 271
bulaolen,

а нельзя поменять формат doc? Библиотека PHPWord работает с docx, rtf...

Ну или вот такое решение
15 окт 18, 10:25    [21703895]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных в шаблон DOC с помощью PHP  [new]
bulaolen
Member

Откуда:
Сообщений: 15
vkle,

А что если, выводить не в .doc а .docx? или вообще в .xls/.xlsx?
Это как-то облегчит решение проблемы или нет?
15 окт 18, 10:34    [21703902]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных в шаблон DOC с помощью PHP  [new]
vkle
Member

Откуда: Самара
Сообщений: 14373
bulaolen,

Форматы .docx и .xlsx достаточно открытые. Если коротко, это зип-архивы, куда понапихали xml-файлов. Внести правки в текстовые файлы (а xml по сути есть текст) и запаковать их в архив - для этого хватает собственных средств php по большому то счету.
+
Как-то делал аналогичное. Места в тексте, куда надо подкинуть данные, обозначил специальными кодами (что-то вроде "%FIELD123%"), распаковал сохраненный архив документ в директорию. Получился шаблон. В скрипте копирование директории с шаблоном, правка, упаковка, уборка мусора. Можно и проще, наверно.


Для .xls/.xlsx есть вполне удобоваримая, хотя и местами тормозная библиотека PHPExcel.
15 окт 18, 10:52    [21703918]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных в шаблон DOC с помощью PHP  [new]
vkle
Member

Откуда: Самара
Сообщений: 14373
bulaolen,

Вдогонку. Не знаю, работает ли с современным МС Офисом (не проверял), но во времена 2002 пользовались некоторым обманом. Формировали HTML-файл и сохраняли с расширением .xls - его его ексель вполне переваривал. Конечно, только для простейших вещей годилось.
15 окт 18, 10:56    [21703920]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных в шаблон DOC с помощью PHP  [new]
bulaolen
Member

Откуда:
Сообщений: 15
Да! Можно делать вывод в .docx, это тоже подойдет потому что шаблон пойдет на печать! Насчет .xlsx не уверен, придется помучиться с версткой документа.
web-страница находится на сервере Ubuntu, связь организована через консоль putty.
Пробовал через PHPWord, но не получилось и примеров в сети не так много, подходящих под ситуацию еще меньше!
15 окт 18, 11:56    [21703984]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных в шаблон DOC с помощью PHP  [new]
SQLPowerUser
Member

Откуда: ссылка в профиле
Сообщений: 271
vkle
Для .xls/.xlsx есть вполне удобоваримая, хотя и местами тормозная библиотека PHPExcel.
PHPExcel уже заменили на PhpSpreadsheet. Активно юзаю с апреля, работает быстро.

bulaolen,
21703895 ???
15 окт 18, 12:01    [21703989]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных в шаблон DOC с помощью PHP  [new]
vkle
Member

Откуда: Самара
Сообщений: 14373
SQLPowerUser
PHPExcel уже заменили на PhpSpreadsheet
Ничего себе, уж три года как! Так вот "часто" его использую
15 окт 18, 12:15    [21704004]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных в шаблон DOC с помощью PHP  [new]
SMART_001
Member

Откуда: Astana
Сообщений: 54
vkle,

Добрый вечер! Как можно устранить
выдает ошибку, спасибо!

Fatal error: Call to a member function loadTemplate() on a non-object in W:\domains\test.com\word.php on line 7

<?php

require 'vendor/autoload.php';

$phpWord = new  \PhpOffice\PhpWord\PhpWord();

$document = $PHPWord->loadTemplate('Template.docx'); //шаблон
$document->setValue('d_num', '777'); //номер договора
$document->setValue('d_date', '04.10.2014'); //дата договора
$document->setValue('last_name', 'Никоненко'); //фамилия
$document->setValue('name', 'Сергей');// имя
$document->setValue('surname', 'Васильевич');// отчество

header("Content-Description: File Transfer");
header('Content-Disposition: attachment; filename="my dream.docx"');
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');

$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$xmlWriter->save("php://output");					
14 дек 18, 16:21    [21764203]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных в шаблон DOC с помощью PHP  [new]
vkle
Member

Откуда: Самара
Сообщений: 14373
Ну как... Можно писать имена переменных правильно, а не копипастить. Если это не помогает, то смотреть var_dump'ом, что содержит используемая переменная.
14 дек 18, 19:44    [21764392]     Ответить | Цитировать Сообщить модератору
Все форумы / PHP, Perl, Python Ответить