Sorun PHP word dosyasını düzenleme

0 Cevap php

Yani bir Word belgesinde bazı metin düzenlemek gerekir. Bir Word belgesi oluşturulmuş ve XML olarak kaydedilir. O (MS Word XML dosyasını açın ve tam docx orijinal gibi görünüyor) doğru olarak kaydedilir.

Öyleyse ben (sadece iki satır) (EDIT - zaten sabit feryat çalışan bir sürümü) dosyasında bazı metin düzenlemek için PHP DOM kullanmak:

<?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);

Bu doğru (hata) idam olur. Bu iki satır:

<w:t>First Name:</w:t>
<w:t>Last Name:</w:t>

Bunlarla yerini almak:

<w:t>First Name: Richard</w:t>
<w:t>Last Name: Knop</w:t>

MS Word final xml.xml dosyasını açmaya çalıştığınızda Ancak, (Word donuyor) açmıyor. Herhangi bir öneriniz.

EDIT:

I) (Levenstein kullanarak çalıştı:

$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++;
}

Hangi şey çıkılır.

Hangi garip. Ben not defteri final xml.xml dosyasını açtığınızda, ben açıkça bu iki satır değişmiş olduğunu görebilirsiniz.

EDIT2:

İşte template.xml dosyası: http://uploading.com/files/61b2922b/template.xml/

0 Cevap