Skip to content

phpword v0.13.1 corrupting docx file after saving #1121

Open
@Zxurian

Description

@Zxurian

( This was all working with v0.12, however we upgraded our server to PHP 7, and as a result, had to update phpword to v0.13. Since we use a later Zend Framework, I also had to fork and modify the phpword repo to not require specific zendframework/zendframework: 2.4 but instead zendframework/zendframework: ^2 )

I have a .docx file that I've created that has several ${xxx} phpword placeholders in it. With the upgrade to phpword v0.13, saving the files is now corrupting them. Trying to open the document complains of a mismatched tag (xml below), and even after correcting the mismatch, the document itself still has malformed formatting from the original.

Code for template variable swapping:

        $template = new PhpWord\TemplateProcessor($this->templatePath);
        foreach ($this->transposeVars() as $key => $value) {
            $template->setValue($key, $value);
        }
        $template->saveAs($fileName);

Original document.xml

<wps:txbx><w:txbxContent><w:p w:rsidR="00B47627" w:rsidRPr="00905ACC" w:rsidRDefault="00B47627" w:rsidP="00B47627"><w:pPr><w:spacing w:after="0"/><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="52"/><w:szCs w:val="52"/></w:rPr></w:pPr><w:r w:rsidRPr="00905ACC"><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="52"/><w:szCs w:val="52"/></w:rPr><w:t>{{$pub</w:t></w:r><w:r w:rsidR="00643EFB"><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="52"/><w:szCs w:val="52"/></w:rPr><w:t xml:space="preserve">               </w:t></w:r><w:r w:rsidRPr="00905ACC"><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="52"/><w:szCs w:val="52"/></w:rPr><w:t>}}</w:t></w:r></w:p><w:p w:rsidR="00B47627" w:rsidRDefault="00B47627" w:rsidP="00B47627"><w:pPr><w:spacing w:after="0"/><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr><w:t>My Company</w:t></w:r></w:p><w:p w:rsidR="00B47627" w:rsidRDefault="00B47627" w:rsidP="00B47627"><w:pPr><w:spacing w:after="0"/><w:ind w:right="45"/><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr><w:t>My Division</w:t></w:r></w:p><w:p w:rsidR="00B47627" w:rsidRDefault="00B47627" w:rsidP="00B47627"><w:pPr><w:spacing w:after="0"/><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr><w:t>My Address</w:t></w:r></w:p><w:p w:rsidR="00B47627" w:rsidRDefault="00B47627" w:rsidP="00B47627"><w:pPr><w:spacing w:after="0"/><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr><w:t>My Address 2</w:t></w:r></w:p><w:p w:rsidR="00B47627" w:rsidRPr="004167CD" w:rsidRDefault="00B47627" w:rsidP="00B47627"><w:pPr><w:spacing w:after="0"/><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr></w:pPr></w:p></w:txbxContent></wps:txbx>

Corrupted after saving document.xml (notice the mismatched <wps:txbx> tag, as well as for some reason repeating and concatenating text earlier on in the xml.

<wps:txbx><w:txbxContent><w:p w:rsidR="00B47627" w:rsidRPr="00905ACC" w:rsidRDefault="00B47627" w:rsidP="00B47627"><w:pPr><w:spacing w:after="0"/><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="52"/><w:szCs w:val="52"/></w:rPr></w:pPr><w:r w:rsidRPr="00905ACC"><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="52"/><w:szCs w:val="52"/></w:rPr><w:t>{{$pub               }}My CompanyMy DivisionMy AddressMy Address 2{{$pub               }}</w:t></w:r></w:p><w:p w:rsidR="00B47627" w:rsidRDefault="00B47627" w:rsidP="00B47627"><w:pPr><w:spacing w:after="0"/><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr><w:t>My Company</w:t></w:r></w:p><w:p w:rsidR="00B47627" w:rsidRDefault="00B47627" w:rsidP="00B47627"><w:pPr><w:spacing w:after="0"/><w:ind w:right="45"/><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr><w:t>My Division</w:t></w:r></w:p><w:p w:rsidR="00B47627" w:rsidRDefault="00B47627" w:rsidP="00B47627"><w:pPr><w:spacing w:after="0"/><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr><w:t>My Address</w:t></w:r></w:p><w:p w:rsidR="00B47627" w:rsidRDefault="00B47627" w:rsidP="00B47627"><w:pPr><w:spacing w:after="0"/><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr><w:t>My Address 2</w:t></w:r></w:p><w:p w:rsidR="00B47627" w:rsidRPr="004167CD" w:rsidRDefault="00B47627" w:rsidP="00B47627"><w:pPr><w:spacing w:after="0"/><w:rPr><w:rFonts w:ascii="Open Sans" w:hAnsi="Open Sans" w:cs="Open Sans"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr></w:pPr></w:p></w:txbxContent></v:textbox>

Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions