微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP 用 ZipArchive() 替换 docx 图片

如何解决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 举报,一经查实,本站将立刻删除。