PHP में बहुत ईमानदार DOC फ़ाइल पीढ़ी नहीं है

प्रत्येक कार्य के कई समाधान हैं। और कभी-कभी, गति के लिए, आपको सबसे सुंदर नहीं चुनना होगा, लेकिन इसके लिए निर्धारित लक्ष्यों को पूरा करना और पूरा करना है। इसलिए, बहुत ही सुंदर दिन पर, निम्नलिखित फ़ंक्शन को लागू करने की आवश्यकता थी: साइट के प्रत्येक (लगभग) पृष्ठ को स्वचालित रूप से डीओसी और पीडीएफ प्रारूपों में प्रतियां उत्पन्न होनी चाहिए। सामग्री के अंदर सभी तालिकाओं और चित्रों के संरक्षण के साथ। और अगर पीडीएफ के साथ सब कुछ अपेक्षाकृत सरल है (टीसीपीडीएफ हमारे दोस्त और भाई हैं), तो डीओसी के साथ एक परेशानी थी। कटौती के तहत - इस समस्या को हल करने का एक उदाहरण। निम्नलिखित समाधान मेरे दिमाग में आए:यहां, वास्तव में, तीसरे विकल्प से, अंतिम समाधान का जन्म हुआ: एमएचटी प्रारूप में एक दस्तावेज़ बनाएं, इसमें छवियों को एकीकृत करें और डीओसी एक्सटेंशन के साथ सहेजें। यहां से ली गई एक साधारण लाइब्रेरी का उपयोग पीढ़ी के लिए किया जाता था । कोड सुंदर और बहुमुखी, अधिक होने का नाटक नहीं करता है, इसमें ऐसी समस्याएं हैं जो उस साइट के लिए प्रासंगिक नहीं हैं, लेकिन मुख्य बात यह है कि यह काम करता है, और विषय को समझने के लिए पर्याप्त है।

लिखित फ़ंक्शन का उपयोग करने का एक उदाहरण:

$link="m.habrahabr.ru/post/136811/"; CreateDOC($link,"test.doc"); 



और यहाँ फ़ंक्शन का स्रोत कोड है:

 function CreateDOC($link,$filename) { //  ,  $base_link=$link; $base_link=explode("/",$link); unset($base_link[count($base_link)-1]); $base_link[]=""; $base_link=implode("/",$base_link); //   $get_text=file_get_contents($link); // ,       mht $MhtFileMaker = new MhtFileMaker(); //    //  ,   ,   FlexIDK preg_match_all('@<img(.*)?src="([^"]+)"@ui', $get_text, $matches); foreach ($matches[4] as $img) { $img_tmp=$img; $img_tmp_old=$img; //,  ?  ! if (strpos($img_tmp,"http")===FALSE) $img_tmp=$base_link.$img_tmp; //      $img_array=explode("//",$img_tmp); $img_name_only=$img_array[1]; $img_name_only=explode("/",$img_name_only); unset($img_name_only[0]); $img_name_only=implode("/",$img_name_only); //     ( ) $get_text=str_replace($img_tmp_old,$img_name_only,$get_text); //     $MhtFileMaker->AddFile($img_tmp, $img_name_only, NULL); }; // ,     $MhtFileMaker->AddContents("index.html","text/html",$get_text); //  $MhtFileMaker->MakeFile($filename); }; 
स्वाभाविक रूप से, यह एक बहुत अधिक सार्वभौमिक और प्रत्यक्ष वर्ग के आधार पर लिख सकता है, लेकिन हमारे उद्देश्यों के लिए यह पर्याप्त था। मुख्य बात यह है कि यह समाधान काम करता है, और जल्दी से पर्याप्त है। मुझे आशा है कि यह किसी के लिए उपयोगी लगता है।

अद्यतन: टिप्पणियों में हमने परिणामी फ़ाइल का परीक्षण किया - आम तौर पर यह केवल Microsoft Word 2003 में खुलता है और उच्चतर, तृतीय-पक्ष उत्पादों (ओपनऑफ़िस और अन्य) में समस्याएं उत्पन्न होती हैं। इसके अलावा टिप्पणियों में कई अन्य, अधिक सही रूपांतरण विधियों के लिंक हैं।

अपडेट 2: स्रोत अपडेट किया गया - फ्लेक्सिडक ने अधिक सफल नियमित सीज़न की पेशकश की, अतिरिक्त पात्रों के बिना छवि पथ का चयन किया।

Source: https://habr.com/ru/post/In136999/


All Articles