PHPOffice / PHPWord

A pure PHP library for reading and writing word processing documents
https://phpoffice.github.io/PHPWord/
Other
7.16k stars 2.68k forks source link

TemplateProcessor deleteBlock is not working #2581

Open diantonio85 opened 4 months ago

diantonio85 commented 4 months ago

Describe the Bug

$templateProcessor->deleteBlock is not working with attached DOCX and PHP 8.1 or above

Steps to Reproduce

Please provide a code sample that reproduces the issue.

<?php
require __DIR__ . '/vendor/autoload.php';
use PhpOffice\PhpWord\Settings;
use PhpOffice\PhpWord\TemplateProcessor;
[test.docx](https://github.com/PHPOffice/PHPWord/files/14487611/test.docx)

$templateProcessor = new TemplateProcessor($inputFileName);
$templateProcessor->deleteBlock('NASCONDI_SITI', '');

Expected Behavior

I expected sections between NASCONDI_SITI to get deleted , but this is not happening

Current Behavior

Currently only the section on page 2 is getting delete, while on page 1 they are still there

Context

Please fill in your environment information:

diantonio85 commented 4 months ago

It seems $templateProcessor->deleteBlock doesn't work with tables. I found an alternative solution using cloneBlock :

$templateProcessor->cloneBlock('NASCONDI_SITI', 0);

If deleteBlock (and replaceBlock) don't work with tables, it should be mentioned in the docs

tyler-wright commented 2 months ago

I get a corrupted file whenever I use either deleteBlock or replaceBlock to delete any type of block. Ffunnily enough the cloneBlock method with an argument of '0' actually achieves the deletion without corrupting the file. That means whatever the procedure being used in that method could be applied to deleteBlock or replaceBlock.