我将解释我的问题:我需要使用表单中的变量修改 Word 模板。
我编辑它,一切正常(多维数组除外)但现在我想替换 docx 上已经存在的图像
我“准备”了一张应该是签名的图片,在表格的最后,我想恢复 jpeg 格式的签名,然后把它放在 docx 上已经存在的那个位置
通过在 document.xml 中搜索一点,我找到了要替换的图像的 id:<a:blip r:embed="rId10" cstate="print">
现在,我想知道如何用另一个图像替换这个图像,但我不知道我该怎么做......
有一个替换变量:
初始化 ZipArchive()
$zip = new ZipArchive();
if($zip->open($destination) == false) {
die("Impossible d'ouvrir le fichier");
} else {
echo 'Ouverture du fichier OK !'.'<br/>';
}
// get XML
$xml= $zip->getFromName('word/document.xml');
//Search my {variables} and stock them to $match
preg_match_all("/\{(.*?)\}/",$xml,$match);
if(isset($match[0])){
foreach($match[0] as $keyword) {
$new_word[] = strip_tags($keyword);
}
$xml = str_replace($match[0],$new_word,$xml);
} else {
die("Unable to modify keyword");
}
字符串替换:
$keywords=array(
"{label}",
"{siret}",
"{adress}",
"{postal}",
"{town}",
"{mail}",
"{number}"
);
$replacement=array(
$label,
$siret,
$adress,
$postal,
$town,
$mail,
$number
);
$xml = str_replace($keywords,$replacement,$xml);
if($zip->addFromString('word/document.xml', $xml) !== FALSE){
echo "File written successfully";
}else {
echo "Unable to write file";
}
$zip->close();
感谢您 !
PS:我刚开始使用PHP,如果问题很愚蠢,请原谅
我正在尝试使用 ZipArchive::replaceFile 但没有成功...
编辑:
我终于改变了方法,因为“replaceFile”功能不起作用......
我像这样使用 deleteName 和 addFile :
$signaturePath= "word/media/image2.jpeg";
$newSignature = "public/img/newSignature.jpeg";
if($zip->deleteName($signaturePath)) {
consoleMessage("Ancienne signature effacé !");
if($zip->addFile($newSignature, $signaturePath)) {
consoleMessage("Nouvelle signature ajouté !");
} else {
consoleMessage("La nouvelle signature n'a pas pu être ajouté !");
die();
}
} else {
consoleMessage("La suppression de l'ancienne signature à échoué !");
die();
}
而且效果很好!