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

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

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

ภาพประจำตัวสมาชิก
tsukasaz
PHP VIP Members
PHP VIP Members
โพสต์: 22001
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

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

โพสต์ที่ยังไม่ได้อ่าน โดย 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)

โค้ด: เลือกทั้งหมด

<?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);
?>
 
แก้ไขล่าสุดโดย mindphp เมื่อ 07/07/2012 1:01 pm, แก้ไขไปแล้ว 1 ครั้ง.
เหตุผล: เพิ่ม title
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)
ภาพประจำตัวสมาชิก
tsukasaz
PHP VIP Members
PHP VIP Members
โพสต์: 22001
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

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

โพสต์ที่ยังไม่ได้อ่าน โดย tsukasaz »

ทดสอบโค้ดครับ เนื้อหาในไฟล์ .docx
แนบไฟล์
example.JPG
example.JPG (62.29 KiB) Viewed 10636 times
แก้ไขล่าสุดโดย tsukasaz เมื่อ 07/07/2012 12:12 pm, แก้ไขไปแล้ว 1 ครั้ง.
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)
ภาพประจำตัวสมาชิก
tsukasaz
PHP VIP Members
PHP VIP Members
โพสต์: 22001
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

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

โพสต์ที่ยังไม่ได้อ่าน โดย tsukasaz »

รันโค้ด PHP
แนบไฟล์
example2.JPG
example2.JPG (97.56 KiB) Viewed 10616 times
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)
moomike
PHP Newbie
PHP Newbie
โพสต์: 2
ลงทะเบียนเมื่อ: 15/07/2014 9:31 pm

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

โพสต์ที่ยังไม่ได้อ่าน โดย 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
โพสต์: 2
ลงทะเบียนเมื่อ: 15/07/2014 9:31 pm

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

โพสต์ที่ยังไม่ได้อ่าน โดย moomike »

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

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: Majestic-12 [Bot] และบุคลทั่วไป 94