2010-07-21 3 views
3

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

Спасибо,


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

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

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

Спасибо,

ответ

2

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

См here подробной информации о формате.

+0

Спасибо за ответ, Actualy я загрузить файл .doc и вставить некоторые данные в этом файле док в конце. А затем вставьте URL-адрес файла .doc в базу данных. Тогда, когда я хочу этот файл .doc, я его загружу. Если я преобразую его в xml, как он изменится в текстовом документе. – user343695

+0

Документы Word - это XML.По крайней мере, из MS Word 2007. И даже в 2003 году был какой-то XML уже, но, вероятно, недействителен. –

0

Ну, я рекомендую сохранять файлы в формате XML. Когда вы пишете документ в MS Word, перейдите в Save As -> Other Formats -> Choose XML здесь.

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

Чтобы добавить текст в нижней части, вам просто нужно добавить новый вес: р элемент в теле 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, чтобы узнать, какой из них является правильным.

3

Для файлов 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'); 
0

У меня же задача редактировать .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", "[email protected]", $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(); 
    } 
Смежные вопросы