J'ai donc besoin d'éditer du texte dans un document Word. J'ai créé un document Word et l'ai enregistré en tant que XML. Il est enregistré correctement (je peux ouvrir le fichier XML dans MS Word et il ressemble exactement à l'original docx).Problème lors de la modification du fichier Word en PHP
donc j'utiliser PHP DOM pour modifier un texte dans le fichier (seulement deux lignes) (EDIT - ci-dessous est déjà fixe version de travail):
<?php
$firstName = 'Richard';
$lastName = 'Knop';
$xml = file_get_contents('template.xml');
$doc = new DOMDocument();
$doc->loadXML($xml);
$doc->preserveWhiteSpace = false;
$wts = $doc->getElementsByTagNameNS('http://schemas.openxmlformats.org/wordprocessingml/2006/main', 't');
$c1 = 0; $c2 = 0;
foreach ($wts as $wt) {
if (1 === $c1) {
$wt->nodeValue .= ' ' . $firstName;
$c1++;
}
if (1 === $c2) {
$wt->nodeValue .= ' ' . $lastName;
$c2++;
}
if ('First Name' === substr($wt->nodeValue, 0, 10)) {
$c1++;
}
if ('Last Name' === substr($wt->nodeValue, 0, 9)) {
$c2++;
}
}
$xml = str_replace("\n", "\r\n", $xml);
$fp = fopen('final-xml.xml', 'w');
fwrite($fp, $xml);
fclose($fp);
Ceci est exécuté correctement (aucune erreur). Ces deux lignes:
<w:t>First Name:</w:t>
<w:t>Last Name:</w:t>
Get avec ces remplacés:
<w:t>First Name: Richard</w:t>
<w:t>Last Name: Knop</w:t>
Cependant, lorsque je tente d'ouvrir le fichier final-xml.xml dans MS Word, il ne se ouvre pas (fige Word) . Aucune suggestion.
EDIT:
J'ai essayé d'utiliser Levenstein():
$xml = file_get_contents('template.xml');
$xml2 = file_get_contents('final-xml.xml');
$str = str_split($xml, 255);
$str2 = str_split($xml2, 255);
$i = 0;
foreach ($str as $s) {
$dist = levenshtein($s, $str2[$i]);
if (0 <> $dist) {
echo $dist, '<br />';
}
$i++;
}
qui rien sorti.
Ce qui est bizarre. Lorsque j'ouvre le fichier final-xml.xml dans le bloc-notes, je peux clairement voir que ces deux lignes ont changé.
EDIT2:
Voici le fichier template.xml: http://uploading.com/files/61b2922b/template.xml/
cela pourrait-il être un problème de codage de caractères? –
pourriez-vous 'diff 'l'original et le résultat, pour vérifier que c'est en fait le seul changement que vous avez fait? – mvds
Je vais utiliser array_diff pour essayer de différencier les deux fichiers XML. –