Как изменить файл .doc или .docx в php - PullRequest
3 голосов
/ 21 июля 2010

Мне нужно изменить загруженный файл .doc или .docx в php. Я гуглил, но я только нашел, как читать это, но не так, как есть. Я хочу, чтобы файл слова был как есть, и поместил текст внизу этого файла MS Word. Как это возможно, кто-нибудь знает, пожалуйста, ответьте.

Спасибо


Я использовал следующий код: -

$w='Test';
$fp = fopen('c:/text.doc', 'a+');
fwrite($fp, $w);
fclose($fp);

Добавлена ​​строка, но не отображается в документе word. Когда я изменил расширение файла doc на xml , тогда он показывает строку в конце. почему он не должен отображаться в файле документа.

Спасибо

Ответы [ 4 ]

3 голосов
/ 01 ноября 2011

Для файлов Docx вы можете легко использовать zip-ридер, такой как TbsZip , чтобы читать и редактировать основной XML-файл (файлы Docx на самом деле являются файлами zip-архивов).Для файлов DOC это очень сложно, потому что это двоичный файл.

Вот пример кода с TbsZip:

<?php

$x = "Hello World!";

include_once('tbszip.php');

$zip = new clsTbsZip();

// Open the document
$zip->Open('mydoc.docx');
$content = $zip->FileRead('word/document.xml');
$p = strpos($content, '</w:body>');
if ($p===false) exit("Tag </w:body> not found in document.");

// Add the text at the end
$content = substr_replace($content, '<w:p><w:r><w:t>'.$x.'</w:t></w:r></w:p>', $p, 0);
$zip->FileReplace('word/document.xml', $content, TBSZIP_STRING);

// Save as a new file
$zip->Flush(TBSZIP_FILE, 'new.docx');
2 голосов
/ 21 июля 2010

Документы в формате DOCX должны быть в формате XML (в архиве), поэтому вы можете попытаться проанализировать и изменить их ...

Подробнее о формате см. здесь .

0 голосов
/ 24 октября 2017

У меня такая же задача, чтобы отредактировать .doc или .docx файл в php, я использовал этот код для него.

Ссылка : http://www.onlinecode.org/update-docx-file-using-php/

    $full_path = 'template.docx';
    //Copy the Template file to the Result Directory
    copy($template_file_name, $full_path);

    // add calss Zip Archive
    $zip_val = new ZipArchive;

    //Docx file is nothing but a zip file. Open this Zip File
    if($zip_val->open($full_path) == true)
    {
        // In the Open XML Wordprocessing format content is stored.
        // In the document.xml file located in the word directory.

        $key_file_name = 'word/document.xml';
        $message = $zip_val->getFromName($key_file_name);               

        $timestamp = date('d-M-Y H:i:s');

        // this data Replace the placeholders with actual values
        $message = str_replace("client_full_name",      "onlinecode org",       $message);
        $message = str_replace("client_email_address",  "ingo@onlinecode.org",  $message);
        $message = str_replace("date_today",            $timestamp,             $message);      
        $message = str_replace("client_website",        "www.onlinecode.org",   $message);      
        $message = str_replace("client_mobile_number",  "+1999999999",          $message);

        //Replace the content with the new content created above.
        $zip_val->addFromString($key_file_name, $message);
        $zip_val->close();
    }
0 голосов
/ 21 июля 2010

Хорошо, я рекомендую сохранять файлы в формате XML. Когда вы пишете документ в MS Word, выберите Сохранить как -> Другие форматы -> Выберите XML здесь.

Вы по-прежнему сможете открывать документ в MS Word, и вам будет легко редактировать XML с помощью PHP DOM или SimpleXML.

Чтобы добавить текст внизу, вам просто нужно добавить новый элемент w: p в тело XML:

<w:p w:rsidR="00CF175F" w:rsidRDefault="00CF175F">
<w:r>
<w:t>New text to be added</w:t>
</w:r>
</w:p>

W - пространство имен. Для Word 2007+ это:

http://schemas.openxmlformats.org/wordprocessingml/2006/main

В старом формате XML существуют разные пространства имен, поэтому вам придется просматривать веб-страницы MS, чтобы найти, какое из них правильное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...