PHP

2008-10-09 18 views
30

में एक एमएस वर्ड फ़ाइल को पढ़ना/लिखना क्या COM ऑब्जेक्ट का उपयोग किये बिना PHP में Word (2003 और 2007) फ़ाइलों को पढ़ना और लिखना संभव है? मुझे पता है कि मैं कर सकते हैं:PHP

$file = fopen('c:\file.doc', 'w+'); 
fwrite($file, $text); 
fclose(); 

लेकिन पद एक HTML फ़ाइल नहीं एक देशी .doc फ़ाइल के रूप में यह पढ़ा जाएगा।

+0

मुझे यह बेहद असंभव लगता है कि आप COM का उपयोग किए बिना इसे प्राप्त कर सकते हैं। उत्तर के लिए –

उत्तर

27

लगाने की कोशिश कर डीओसी प्रारूप। मुझे लगता है कि यह कोई वास्तविक व्यवहार्य समाधान नहीं है।

आप Word फ़ाइलों को पढ़ने और लिखने के लिए Microsoft Office XML formats का उपयोग कर सकते हैं - यह Word के 2003 और 2007 संस्करण के साथ संगत है। पढ़ने के लिए आपको यह सुनिश्चित करना होगा कि शब्द दस्तावेज़ सही प्रारूप में सहेजे गए हैं (इसे Word 2007 में Word 2003 XML-Document कहा जाता है)। लिखने के लिए आपको खुले तौर पर उपलब्ध एक्सएमएल स्कीमा का पालन करना होगा। मैंने PHP से Office दस्तावेज़ों को लिखने के लिए कभी भी इस प्रारूप का उपयोग नहीं किया है, लेकिन मैं इसे एक्सेल वर्कशीट (स्वाभाविक रूप से एक्सएमएल-स्प्रेडशीट 2003 के रूप में सहेजा गया) में पढ़ने और वेब पेज पर अपना डेटा प्रदर्शित करने के लिए उपयोग कर रहा हूं। चूंकि फाइलें स्पष्ट रूप से एक्सएमएल डेटा हैं, इसमें भीतर नेविगेट करने और आपके इच्छित डेटा को निकालने का तरीका पता नहीं है।

दूसरा विकल्प - एक शब्द 2007 केवल विकल्प (यदि आपके Word 2003 में OpenXML फ़ाइल स्वरूप स्थापित नहीं हैं) - OpenXML पर पुन: रिसॉर्ट करना होगा। databyss ने here को इंगित किया है कि DOCX फ़ाइल प्रारूप केवल XML फ़ाइलों के साथ एक ज़िप संग्रह है। ओपनएक्सएमएल फ़ाइल प्रारूप के संबंध में MSDN पर बहुत से संसाधन हैं, इसलिए आपको यह पता लगाने में सक्षम होना चाहिए कि आप जो डेटा चाहते हैं उसे कैसे पढ़ा जाए। लेखन मुझे लगता है कि यह बहुत जटिल होगा - यह सिर्फ इस बात पर निर्भर करता है कि आप कितना समय निवेश करेंगे।

शायद आप PHPExcel पर एक नज़र डाल सकते हैं जो एक्सेल 2007 फ़ाइलों को लिखने और ओपनएक्सएमएल मानक का उपयोग कर एक्सेल 2007 फ़ाइलों से पढ़ने में सक्षम लाइब्रेरी है। ओपनएक्सएमएल वर्ड दस्तावेजों को पढ़ने और लिखने की कोशिश करते समय आप शामिल काम का विचार प्राप्त कर सकते हैं।

+1

ऐसा लगता है कि PHPExcel पर पीपीएल ने शब्द दस्तावेज़ बनाने के लिए [PHPWord] (http://phpword.codeplex.com/) बनाया है। – Basic

5

मुझे PHP में मूल शब्द दस्तावेज़ पढ़ने के बारे में पता नहीं है, लेकिन यदि आप PHP में Word दस्तावेज़ लिखना चाहते हैं, तो WordprocessingML (aka WordML) एक अच्छा समाधान हो सकता है। आपको बस इतना करना है कि सही प्रारूप में एक XML दस्तावेज़ बनाएं। मेरा मानना ​​है कि वर्ड 2003 और 2007 दोनों वर्डएमएल का समर्थन करते हैं।

4

शायद आप COM के बिना वर्ड दस्तावेज़ पढ़ने में सक्षम नहीं होंगे।

लेखन इस topic

0

ऑफिस 2007 .docx में कवर किया गया था के बाद से यह एक XML मानक है संभव हो जाना चाहिए। वर्ड 2003 की सबसे अधिक संभावना है कि एमएस द्वारा प्रकाशित मानकों के साथ भी, पढ़ने के लिए COM की आवश्यकता है, क्योंकि ये मानकों बहुत बड़े हैं। मैंने अभी तक उनसे मिलान करने के लिए लिखी कई पुस्तकालयों को नहीं देखा है।

1

2007 कुछ जटिल भी हो सकता है।

.docx प्रारूप एक ज़िप फ़ाइल है जिसमें स्वरूपण और अन्य सामान के लिए अन्य फ़ाइलों के साथ कुछ फ़ोल्डर्स हैं।

.zocx फ़ाइल को .zip पर पुनर्नामित करें और आप देखेंगे कि मेरा क्या मतलब है।

तो यदि आप PHP में ज़िप फ़ाइलों के भीतर काम कर सकते हैं, तो आपको सही रास्ते पर होना चाहिए।

+0

+1। –

0

मुझे नहीं पता कि आप इसका उपयोग करने के लिए क्या कर रहे हैं, लेकिन मुझे खोज अनुक्रमण के लिए .doc समर्थन की आवश्यकता है; मैंने जो किया वह "कमडोक" नामक एक कम कमांडलाइन टूल का उपयोग करता था; यह शब्द दस्तावेज़ की सामग्री को सादे पाठ में स्थानांतरित करता है ताकि इसे अनुक्रमित किया जा सके। यदि आपको स्वरूपण और सामान रखने की आवश्यकता है तो यह आपका टूल नहीं है।

17

इस बनाम < कार्यालय 2007 और अपने शुद्ध पीएचपी, कोई COM बकवास के साथ काम करता है, फिर भी द्विआधारी वर्ड दस्तावेज पढ़ना एक पार्सर बनाने शामिल होगा के लिए प्रकाशित फ़ाइल स्वरूप विनिर्देशों के अनुसार 2007

<?php 



/***************************************************************** 
This approach uses detection of NUL (chr(00)) and end line (chr(13)) 
to decide where the text is: 
- divide the file contents up by chr(13) 
- reject any slices containing a NUL 
- stitch the rest together again 
- clean up with a regular expression 
*****************************************************************/ 

function parseWord($userDoc) 
{ 
    $fileHandle = fopen($userDoc, "r"); 
    $line = @fread($fileHandle, filesize($userDoc)); 
    $lines = explode(chr(0x0D),$line); 
    $outtext = ""; 
    foreach($lines as $thisline) 
     { 
     $pos = strpos($thisline, chr(0x00)); 
     if (($pos !== FALSE)||(strlen($thisline)==0)) 
      { 
      } else { 
      $outtext .= $thisline." "; 
      } 
     } 
    $outtext = preg_replace("/[^a-zA-Z0-9\s\,\.\-\n\r\[email protected]\/\_\(\)]/","",$outtext); 
    return $outtext; 
} 

$userDoc = "cv.doc"; 

$text = parseWord($userDoc); 
echo $text; 


?> 
+1

अगर आप Umlaute को संरक्षित करना चाहते हैं तो इसका उपयोग न करें। –

+0

मुझे कुछ विशेष वर्ण मिलते हैं जिन्हें इस फ़ंक्शन में पार्स नहीं किया जा सकता है। –

0

क्या .rtf प्रारूप आपके उद्देश्यों के लिए काम करेगा? .rtf आसानी से .doc प्रारूप में और से कनवर्ट किया जा सकता है, लेकिन यह सादे टेक्स्ट में लिखा गया है (एम्बेडेड कंट्रोल कमांड के साथ)। इस प्रकार मैं वर्ड दस्तावेजों के साथ अपने आवेदन को एकीकृत करने की योजना बना रहा हूं।

+0

परिस्थिति असंतुलित है कि सवाल मौसम था या नहीं, लेकिन धन्यवाद। – UnkwnTech

1

phpLiveDocx एक ज़ेंड फ्रेमवर्क घटक है और लिनक्स, विंडोज और मैक पर PHP में डीओसी और डॉक्स फ़ाइलों को पढ़ और लिख सकता है।

पर परियोजना वेब साइट देखें:

http://www.phplivedocx.org

+0

संदर्भ लिंक मृत है –

8

आप Antiword उपयोग कर सकते हैं, यह लिनक्स और सबसे लोकप्रिय ओएस के लिए एक नि: शुल्क एमएस वर्ड रीडर है।

$document_file = 'c:\file.doc'; 
$text_from_doc = shell_exec('/usr/local/bin/antiword '.$document_file); 
+8

इस प्रकार के समाधान के साथ समस्या यह है कि यह मानता है कि कोई सर्वर पर सॉफ़्टवेयर स्थापित करने में सक्षम है। – UnkwnTech

+2

लंबे समय तक बिट, लेकिन अगर मैं गलत हूं तो मुझे सही करें। 'सी: \ file.doc' एक विंडोज निर्देशिका है और'/usr/local/bin' एक लिनक्स/यूनिक्स निर्देशिका है? –

+0

@UnkwnTech: जब तक कार्यक्रम को उच्च अनुमति की आवश्यकता नहीं होती है, तब तक अधिकांश प्रोग्राम किसी भी निर्देशिका में स्थापित किए जा सकते हैं जिसके लिए आपको लिखने की अनुमति है। फिर आप प्रोग्राम को संदर्भित करने के लिए पूर्ण पथ का उपयोग कर सकते हैं, या अपने PATH चर में स्थापित निर्देशिका जोड़ सकते हैं। –

2

www.phplivedocx.org एक सोप आधारित सेवा का मतलब है कि आप हमेशा फ़ाइलें भी परीक्षण कर इसके उपयोग के लिए पर्याप्त उदाहरण नहीं है के लिए ऑनलाइन होने की जरूरत है। आश्चर्यजनक रूप से मुझे डाउनलोड करने के 2 दिनों के बाद ही पाया गया (अतिरिक्त ज़ेन फ्रेमवर्क भी आवश्यक है) कि यह एक एसओएपी आधारित प्रोग्राम (मुझे शाप देता है !!!) ... मुझे लगता है कि बिना किसी कॉम के लिनक्स सर्वर पर यह संभव नहीं है और एकमात्र विचार है दस्तावेज़ फ़ाइल को किसी अन्य उपयोग योग्य फ़ाइल में बदलें जो PHP पार्स कर सकता है ...

0

यहां तक ​​कि मैं एक ही तरह की परियोजना [एक ऑनलिनव वर्ड प्रोसेसर] पर काम कर रहा हूं! लेकिन मैंने C# .net और ASP.net का चयन किया है। लेकिन सर्वेक्षण के माध्यम से मैंने किया; मुझे पता है कि

ओपन एक्सएमएल एसडीके और [कार्यालय के लिए दृश्य स्टूडियो उपकरण] VSTO का उपयोग करके

हम आसानी से एक शब्द भी फ़ाइल के साथ काम कर सकते हैं उन्हें हेरफेर और यहां तक ​​कि कई प्रारूपों में अलग करने के लिए आंतरिक रूप से परिवर्तित हो गया इस तरह के .odt, .pdf, .docx आदि ..

तो, गोटो msdn.microsoft.com और कार्यालय विकास टैब के बारे में पूरी तरह से के रूप में। ऐसा करने का यह सबसे आसान तरीका है क्योंकि हमें लागू करने के लिए आवश्यक सभी कार्यों को पहले से ही .NET में उपलब्ध है !!

लेकिन जैसे यू PHP में उर परियोजना करना चाहते हैं, यू यह दृश्य स्टूडियो और PHP के रूप में .net में कर सकते हैं भी .net अनुरूप भाषा में से एक है !!

0

मेरे पास एक ही मामला है मुझे लगता है कि मैं PHP सर्वर के लिए, मेरी फ़ाइलों को कनवर्ट करने के लिए इसका उपयोग करने के लिए एक मुफ्त 50 मेगा विंडोज आधारित होस्टिंग का उपयोग करने के लिए मुफ्त डोमेन के साथ होस्टिंग कर रहा हूं। और उन्हें जोड़ना आसान है। आपको केवल एक एएसपी.NET पृष्ठ बनाना है जो पोस्ट के माध्यम से दस्तावेज़ फ़ाइल प्राप्त करता है और HTTP के माध्यम से इसका उत्तर देता है, इसलिए सरल CURL ऐसा करेगा।

+1

का उपयोग करते हैं ऐसा लगता है कि यह सब करने के बाद ही ऐसा करने का एकमात्र तरीका है। क्या आप अधिक जानकारी प्रदान कर सकते हैं? मेरा मतलब है, क्या मुझे जाना चाहिए और विंडोज़ होस्टिंग खरीदना है और .doc/x फ़ाइल बनाने के लिए एक PHP कोड (जो COM लाइब्रेरी का उपयोग करता है) चलाने के लिए इसका उपयोग करना है? – Dewan159

6

बस कोड को अपडेट करने

<?php 

/***************************************************************** 
This approach uses detection of NUL (chr(00)) and end line (chr(13)) 
to decide where the text is: 
- divide the file contents up by chr(13) 
- reject any slices containing a NUL 
- stitch the rest together again 
- clean up with a regular expression 
*****************************************************************/ 

function parseWord($userDoc) 
{ 
    $fileHandle = fopen($userDoc, "r"); 
    $word_text = @fread($fileHandle, filesize($userDoc)); 
    $line = ""; 
    $tam = filesize($userDoc); 
    $nulos = 0; 
    $caracteres = 0; 
    for($i=1536; $i<$tam; $i++) 
    { 
     $line .= $word_text[$i]; 

     if($word_text[$i] == 0) 
     { 
      $nulos++; 
     } 
     else 
     { 
      $nulos=0; 
      $caracteres++; 
     } 

     if($nulos>1996) 
     { 
      break; 
     } 
    } 

    //echo $caracteres; 

    $lines = explode(chr(0x0D),$line); 
    //$outtext = "<pre>"; 

    $outtext = ""; 
    foreach($lines as $thisline) 
    { 
     $tam = strlen($thisline); 
     if(!$tam) 
     { 
      continue; 
     } 

     $new_line = ""; 
     for($i=0; $i<$tam; $i++) 
     { 
      $onechar = $thisline[$i]; 
      if($onechar > chr(240)) 
      { 
       continue; 
      } 

      if($onechar >= chr(0x20)) 
      { 
       $caracteres++; 
       $new_line .= $onechar; 
      } 

      if($onechar == chr(0x14)) 
      { 
       $new_line .= "</a>"; 
      } 

      if($onechar == chr(0x07)) 
      { 
       $new_line .= "\t"; 
       if(isset($thisline[$i+1])) 
       { 
        if($thisline[$i+1] == chr(0x07)) 
        { 
         $new_line .= "\n"; 
        } 
       } 
      } 
     } 
     //troca por hiperlink 
     $new_line = str_replace("HYPERLINK" ,"<a href=",$new_line); 
     $new_line = str_replace("\o" ,">",$new_line); 
     $new_line .= "\n"; 

     //link de imagens 
     $new_line = str_replace("INCLUDEPICTURE" ,"<br><img src=",$new_line); 
     $new_line = str_replace("\*" ,"><br>",$new_line); 
     $new_line = str_replace("MERGEFORMATINET" ,"",$new_line); 


     $outtext .= nl2br($new_line); 
    } 

return $outtext; 
} 

$userDoc = "custo.doc"; 
$userDoc = "Cultura.doc"; 
$text = parseWord($userDoc); 

echo $text; 


?> 
+0

हालांकि दिलचस्प है, यह Word97 दस्तावेज़ की शुरुआत को खोजने में विफल रहा, और दस्तावेज़ को काट दिया। मैंने पाया कि यह 1536 और 1 99 6 की संख्या में है, जिसे पार्सिंग द्वारा निर्धारित किया जाना चाहिए, मनमाने ढंग से हार्डकोडिंग नहीं। साथ ही, स्मार्ट कोट्स, इलिप्स, एम-डैश और विशेष सिंगल कोट्स जैसे विशेष वर्णों को हटा दिया गया था, और मैंने पूरे आउटपुट में बहुत सारे एम्पर्सेंड देखा। तो, यह एक दिलचस्प शुरुआत है, लेकिन बहुत परिष्करण की जरूरत है। – Volomike

+0

आप विशेष एमएस वर्ड अक्षरों को परिवर्तित करने के तरीके पर इस ट्यूटोरियल का भी संदर्भ लेना चाहेंगे: http://www.toao.net/48-replacing-smart-quotes-and-em-dashes-in-mysql – Volomike

+0

फ़ंक्शन कुछ बनाता है अजीब वर्ण: "Œ'ÛJA † ïßaÈ} 7Û" ÒÙÞH¡w "" w̤ھ½ ... " –

1

एक तरह से PHP के साथ वर्ड फ़ाइलों कि आपको दिलचस्प लग सकती PHPDocX की मदद से है हेरफेर करने के लिए। आप देख सकते हैं कि यह online tutorial पर एक नज़र डालने पर कैसे काम करता है। आप सामग्रियों को सम्मिलित या निकालने या एक से अधिक वर्ड फाइलों को एक एसिलिंग में मर्ज कर सकते हैं।

संबंधित मुद्दे