added clone, delete, replace block #165

Because I needed to clone, delete and replace some tables, I added those
functions.
This commit is contained in:
Diego Vieira 2014-04-04 00:58:42 -03:00
parent db57346c47
commit e800d96cf9
5 changed files with 100 additions and 0 deletions

View File

@ -0,0 +1,18 @@
<?php
include_once 'Sample_Header.php';
// New Word document
echo date('H:i:s') , " Create new PhpWord object" , \EOL;
$phpWord = new \PhpOffice\PhpWord\PhpWord();
$document = $phpWord->loadTemplate('resources/Sample_20_TemplateBlockClone.docx');
// Will clone everything between ${tag} and ${/tag}, the number of times. By default, 1.
$document->cloneBlock('CLONEME', 3);
$name = 'Sample_20_TemplateBlockClone.docx';
echo date('H:i:s'), " Write to Word2007 format", EOL;
$document->saveAs($name);
rename($name, "results/{$name}");
include_once 'Sample_Footer.php';

View File

@ -0,0 +1,18 @@
<?php
include_once 'Sample_Header.php';
// New Word document
echo date('H:i:s') , " Create new PhpWord object" , \EOL;
$phpWord = new \PhpOffice\PhpWord\PhpWord();
$document = $phpWord->loadTemplate('resources/Sample_21_TemplateBlockDelete.docx');
// Everything between ${tag} and ${/tag}, will be deleted/erased.
$document->deleteTemplateBlock('DELETEME');
$name = 'Sample_21_TemplateBlockDelete.docx';
echo date('H:i:s'), " Write to Word2007 format", EOL;
$document->saveAs($name);
rename($name, "results/{$name}");
include_once 'Sample_Footer.php';

Binary file not shown.

Binary file not shown.

View File

@ -257,6 +257,70 @@ class Template
$this->_documentXML = $result;
}
/**
* Clone a block
*
* @param mixed $blockname
* @param int $clones
* @param bool $replace
* @return null
*/
public function cloneBlock($blockname, $clones = 1, $replace = true)
{
$xmlBlock = null;
preg_match('/(<\?xml.*)(<w:p.*>\${'.$blockname.'}<\/w:.*?p>)(.*)(<w:p.*\${\/'.$blockname.'}<\/w:.*?p>)/is', $this->_documentXML, $matchs);
if (isset($matchs[3])) {
$xmlBlock = $matchs[3];
$cloned = array();
for($i = 1; $i <= $clones; $i++) {
$cloned[] = $xmlBlock;
}
if ($replace) {
$this->_documentXML = str_replace($matchs[2].$matchs[3].$matchs[4], implode('', $cloned), $this->_documentXML);
}
}
return $xmlBlock;
}
/**
* Replace a block
*
* @param mixed $blockname
* @param $replacement
*/
public function replaceBlock($blockname, $replacement)
{
$this->deleteTemplateBlock($blockname, $replacement);
}
public function xmlpretty($xml)
{
$domxml = new DOMDocument('1.0');
$domxml->preserveWhiteSpace = false;
$domxml->formatOutput = true;
$domxml->loadXML($xml);
$xml_string = $domxml->saveXML();
return $xml_string;
}
/**
* Delete a block of text
*
* @param mixed $blockname
* @param string $replacement
*/
public function deleteTemplateBlock($blockname, $replacement = '')
{
$xmlBlock = null;
preg_match('/(<\?xml.*)(<w:p.*>\${'.$blockname.'}<\/w:.*?p>)(.*)(<w:p.*\${\/'.$blockname.'}<\/w:.*?p>)/is', $this->_documentXML, $matchs);
if (isset($matchs[3])) {
$this->_documentXML = str_replace($matchs[2].$matchs[3].$matchs[4], $replacement, $this->_documentXML);
}
}
/**
* Save XML to temporary file
*