Передавать динамические значения при экспорте в docx с использованием PHPWord в laravel

Я пытаюсь экспортировать данные пользователя в файл .docx. Файл успешно экспортирован, но он дает объект. Формат phpword не работает. Как написать код для правильного экспорта динамических значений, кто-нибудь мне поможет?

В AdminController.php -

public function exportUserToDoc(Request $request, $id)
{
    $wordTest = new \PhpOffice\PhpWord\PhpWord();
    $newSection = $wordTest->addSection();

    $desc1 = User::find($id);

    $newSection->addText($desc1, array('name' => $desc1->name, 'email' => $desc1->email, 'phone' => $desc1->phone, 'address' => $desc1->address));
    $objectWriter = \PhpOffice\PhpWord\IOFactory::createWriter($wordTest, 'Word2007');
    try{
        $objectWriter->save(storage_path('TestWordFile.docx'));
    }catch (Exception $e){

    }
    return response()->download(storage_path('TestWordFile.docx'));
}

После загрузки файла doc результат такой:

{"id":1,"name":"Emdadul Huq Shikder","email":"[email protected]","phone":"+8801674338411","address":"59/6/1 West Razabazar, Dhaka","status":0,"created_at":"2018-03-13 05:18:32","updated_at":"2018-03-13 05:35:51"}

Я хочу, чтобы результат был хорошо отформатирован, например, с заголовком «Имя», «Электронная почта» и т. д.

в phpword версии 0.13.0: addText(string $text, mixed $fStyle = null, mixed $pStyle = null), т.е. вам нужно передать отформатированный текст нить в функцию addText в качестве первого параметра.

ejuhjav 13.03.2018 12:52

чего ты хочешь добиться? Как его форматировать? Одно решение - это решение, предложенное eMM (используйте TemplateProcessor), другое решение - добавить текст, как вы это делаете, но вы должны отформатировать текст перед его добавлением. Посмотрите примеры в файле samples / Sample_04_Textrun.php.

troosan 14.03.2018 11:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
2
3 665
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Шаг 1: Создайте файл .docx с помощью текстового редактора (OpenOffice, LibreOffice Writer, MS Word и т. д.), Который будет служить шаблоном вашего `` Пользовательского документа '' (таким образом вы можете установить размер, поля, ориентацию и другие атрибуты, а также отформатировать свой документируйте творчески, используя инструменты, предоставляемые программой обработки текста, которую вы используете).

Для динамических значений в вашем документе вы можете использовать переменные в качестве заполнителей. Синтаксис переменной документа - ${variable}. Убедитесь, что имена ваших переменных уникальны.

Вот снимок экрана с примером шаблона документа с переменными документа.

Шаг 2: Загрузите свой шаблон документа в путь к хранилищу вашего сервера.

Шаг 3: Создайте новый TemplateProcessor и присвойте значения переменным, которые вы разместили в шаблоне документа.

$desc1 = User::find($id);   

$my_template = new \PhpOffice\PhpWord\TemplateProcessor(storage_path('user_template.docx'));

$my_template->setValue('name', $desc1->name);
$my_template->setValue('email', $desc1->email);
$my_template->setValue('phone', $desc1->phone);
$my_template->setValue('address', $desc1->address); 

Шаг 4: Создайте безопасное имя файла (например, user_1.docx)

Шаг 5: Создайте файл .docx из вашего шаблона с безопасным именем файла, которое вы создали на предыдущем шаге.

try{
    $my_template->saveAs(storage_path('user_1.docx'));
}catch (Exception $e){
    //handle exception
}

Шаг 6: Полный фрагмент кода для загрузки сохраненного файла.

public function exportUserToDoc(Request $request, $id)
{
    $desc1 = User::find($id);

    $my_template = new \PhpOffice\PhpWord\TemplateProcessor(storage_path('user_template.docx'));

    $my_template->setValue('name', $desc1->name);
    $my_template->setValue('email', $desc1->email);
    $my_template->setValue('phone', $desc1->phone);
    $my_template->setValue('address', $desc1->address);      

    try{
        $my_template->saveAs(storage_path('user_1.docx'));
    }catch (Exception $e){
        //handle exception
    }

    return response()->download(storage_path('user_1.docx'));
}
public function wordExport($id){
    $doc = Doc::find($id);

    $templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor('word-template/document.docx');

    $title = $doc->title;
    $reg = $doc->reg;

    $templateProcessor->setValue('title', $title);
    $templateProcessor->setValue('reg', $reg);

    $fileName = $title;
    $templateProcessor->saveAs($fileName . '.docx');
    return response()->download($fileName . '.docx')->deleteFileAfterSend(true);
}

Привет, вот мой код, он работает хорошо. Но теперь я застрял - как сохранить в формате pdf?

Adward R 21.08.2020 13:35

Другие вопросы по теме