user14053977
user14053977

Reputation: 151

generate Word document with dynamic variables using Laravel

This is the first time that I try to generate a Word document with Laravel.

I have in database columns that I should to generate in a Word document.

For example I have the following database:

enter image description here

I should generate a document file which contains hello John for example

So all the elements that is inside '<<>>' are a dynamic variables .

How can I get from database the value of the column preamble and set the variable name in the same time?

I found that exists a package names phpwordn but I found that I should have a template that is a word file with dynamic variables n but in my case I have no template I have all the components of my Word file in the database.

Is it possible to do that?

If you have any idea or an example to do that help me.

Upvotes: 1

Views: 1350

Answers (1)

Robo Robok
Robo Robok

Reputation: 22755

You can use preg_replace_callback() to convert all special tags to their corresponding values. In your case a tag has a form of <<foo>>, so here it goes:

$values = [
    'me' => 'user14053977',
    'saviour' => 'RoboRobok',
];

$template = 'My name is <<me>> and <<saviour>> saved me!';

$result = preg_replace_callback(
    '#<<(\w+)>>#',
    function (array $matches) use ($values): string {
        [$tag, $tagName] = $matches;
        return $values[$tagName] ?? $tag;
    },
    $template
);

// $result is now "My name is user14053977 and RoboRobok saved me!"

It's a pure PHP code. Now it's just the matter of using the values in Laravel and injecting $result to your Word document.

Upvotes: 1

Related Questions