0

我将解释我的问题:我需要使用表单中的变量修改 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();
}

而且效果很好!

4

0 回答 0