如何解决PHP 用 ZipArchive() 替换 docx 图片
我将解释我的问题:我需要使用表单中获得的变量修改 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();
}
而且效果很好!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。