การแปลงไฟล์ Microsoft Word 2007 .docx เป็นข้อความ text ด้วย php

หมวดสำหรับแบ่งบันความ รู้ต่างๆ จะมีหมวดย่อยๆ ในหมวดนี้ เช่น php, SQL, XML, CSS

Moderators: mindphp, ผู้ดูแลกระดาน

User avatar
tsukasaz
PHP VIP Members
PHP VIP Members
Posts: 12350
Joined: 18/04/2012 9:39 am

การแปลงไฟล์ Microsoft Word 2007 .docx เป็นข้อความ text ด้วย php

Post by tsukasaz »

การแปลงไฟล์ docx เป็น text ด้วย php

ไฟล์ .docx เป็นไฟล์ที่สร้างจาก Microsoft Office 2007 ขึ้นไป ซึ่งมีการเปลี่ยนแปลงการกำหนดรูปแบบแฟ้มที่ใช้เป็น XML สำหรับ Microsoft Office Excel 2007, Microsoft Office Word 2007 และ Microsoft Office PowerPoint 2007 รูปแบบแฟ้มใหม่นี้เรียกว่ารูปแบบของ Office Open XML

Office Open XML เป็นชุดของรูปแบบไฟล์ที่สามารถใช้ในการแสดงเอกสารอิเล็กทรอนิกส์ รูปแบบที่กำหนดเป็นชุดคำสั่ง XML สำหรับเอกสาร สเปรดชีต การประมวลผลและนำเสนอ ที่ได้รับการผลิตโดยโปรแกรม Microsoft Office เพื่อความสะดวกในการทำงานร่วมกัน รวมถึงการใช้งานกับผู้ผลิตรายอื่น และในหลายแพลตฟอร์ม ซึ่ง Office Open XML เป็น ZIP เข้ากันได้กับแพคเกจที่มี OPC XML และแหล่งข้อมูลอื่นๆ นั่นคือสามารถดูเนื้อหาของแฟ้ม OOXML โดยการเปลี่ยนชื่อให้เป็นไฟล์ zip และเปิดด้วยเครื่องมือของ zip ไฟล์ xml นั้นจะสามารถดูได้ในเว็บเบราเซอร์หรือโปรแกรมแก้ไขข้อความธรรมดา
(ที่มา: http://en.wikipedia.org/wiki/Office_Open_XML)

สรุปสำหรับการแปลงไฟล์ docx เป็น text นั้น ให้เปลี่ยน extension จาก docx เป็น zip และเปิดมันด้วยโปรแกรม zip จะเห็นว่ามีโฟลเดอร์ word ซึ่งรวมเนื้อหาของเอกสารในรูปของ xml เพียงแค่เราเปิดไฟล์ document.xml มาอ่านในรูปรูปแบบของ XML ก็จะได้เนื้อหาของเอกสาร

สำหรับการใช้ PHP ในการอ่าน เมื่อได้ไฟล์ document.xml มาจะใช้ฟังก์ชั่น strip_tags ใน php เพื่อให้เหลือแต่ข้อความ แต่ถ้าไฟล์อยู่ในรูป zip ไม่ได้อยู่ในรูป xml ต้องใช้ไลบรารี่ของ ZipArchive ช่วยในการอ่านไฟล์

ตัวอย่างโค้ด แปลงไฟล์ docx เป็น text ด้วย PHP
(ที่มา http://www.botskool.com/geeks/how-extract-text-docx-or-odt-files-using-php)

Code: Select all

<?php
 /*Name of the document file*/
$document = 'example.docx';
 
/**Function to extract text*/
function extracttext($filename) {
    //Check for extension
    $ext = end(explode('.', $filename));
 
    //if its docx file
    if($ext == 'docx')
    $dataFile = "word/document.xml";
    //else it must be odt file
    else
    $dataFile = "content.xml";    
       
    //Create a new ZIP archive object
    $zip = new ZipArchive;
 
    // Open the archive file
    if (true === $zip->open($filename)) {
        // If successful, search for the data file in the archive
        if (($index = $zip->locateName($dataFile)) !== false) {
            // Index found! Now read it to a string
            $text = $zip->getFromIndex($index);
            // Load XML from a string
            // Ignore errors and warnings
            $xml = DOMDocument::loadXML($text, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
            // Remove XML formatting tags and return the text
            return strip_tags($xml->saveXML());
        }
        //Close the archive file
        $zip->close();
    }
 
    // In case of failure return a message
    return "File not found";
}
 
echo extracttext($document);
?>
 
Last edited by mindphp on 07/07/2012 1:01 pm, edited 1 time in total.
Reason: เพิ่ม title
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)
User avatar
tsukasaz
PHP VIP Members
PHP VIP Members
Posts: 12350
Joined: 18/04/2012 9:39 am

Re: การแปลงไฟล์ docx เป็น text ด้วย php

Post by tsukasaz »

ทดสอบโค้ดครับ เนื้อหาในไฟล์ .docx
Attachments
example.JPG
example.JPG (62.29 KiB) Viewed 5434 times
Last edited by tsukasaz on 07/07/2012 12:12 pm, edited 1 time in total.
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)
User avatar
tsukasaz
PHP VIP Members
PHP VIP Members
Posts: 12350
Joined: 18/04/2012 9:39 am

Re: การแปลงไฟล์ docx เป็น text ด้วย php

Post by tsukasaz »

รันโค้ด PHP
Attachments
example2.JPG
example2.JPG (97.56 KiB) Viewed 5414 times
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)
moomike
PHP Newbie
PHP Newbie
Posts: 2
Joined: 15/07/2014 9:31 pm

Re: การแปลงไฟล์ Microsoft Word 2007 .docx เป็นข้อความ text ด้วย php

Post by moomike »

คือว่า ลองทำตาม การแปลงไฟล์ docx เป็น text ด้วย php จากตัวอย่างด้านบน แต่มันขึ้น error ว่า Fatal error: Class 'ZipArchive' not found in C:\AppServ\www\it-technologies\open_wordTest1.php on line 27 แต่จากที่ดู ตัวที่มีปัญหา คือ $zip = new ZipArchive; แต่ว่าได้ลองดูแล้ว ตัวนี้ มันก็ยังมีอยู่ ไม่ทราบว่าเกิดจากอะไร ค่ะ
moomike
PHP Newbie
PHP Newbie
Posts: 2
Joined: 15/07/2014 9:31 pm

Re: การแปลงไฟล์ Microsoft Word 2007 .docx เป็นข้อความ text ด้วย php

Post by moomike »

พอลองทำตาม แล้วมันขึ้นว่า Fatal error: Class 'ZipArchive' not found in C:\AppServ\www\it-technologies\open_wordTest1.php on line 27 เราจะมีวิธีแก้ยังไง ค่ะ
Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Share Knowledge”

Who is online

Users browsing this forum: facebook.com [Crawler] and 10 guests