2012-06-19 10 views
8

पर कनवर्ट करें मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसके लिए HTML ईमेल को टेक्स्ट में कनवर्ट करना आवश्यक है।HTML तालिका को टेक्स्ट

<table> 
    <tr> 
     <td width="10%"></td> 
     <td width="60%"> test product </td> 
     <td width="20%">5</td> 
     <td width="10%"> £50.00 </td> 
    </tr> 
    <tr> 
     <td></td> 
     <td colspan="3" width="100%"> Project Name: Test Project </td> 
    </tr> 
    <tr> 
     <td width="10%"> </td> 
     <td colspan="2" width="80%"> Page 1 : 01 New York 1.jpg </td> 
     <td width="10%"> £0.00 </td> 
    </tr> 
</table> 

प्रत्याशित परिणाम एक पाठ फ़ाइल में इस तरह दिखना चाहिए (कॉलम के साथ अच्छी तरह से गठबंधन):

test product          5   £50.00 
Project Name: Test Project                
Page 1 : 01 New York 1.jpg         £0.00 

मेरे विचार से HTML सामग्री को पार्स है नीचे HTML कोड का एक सरलीकृत संस्करण है DOMDocument। फिर मैं तालिका के लिए एक डिफ़ॉल्ट चौड़ाई निर्धारित करूंगा (यानी: 100 रिक्त स्थान) फिर प्रत्येक कॉलम की चौड़ाई को% से रिक्त स्थान तक बदलें (colspan & width<td> टैग की विशेषता)। फिर मैं प्रत्येक कॉलम में डेटा के इन कॉलम चौड़ाई को strlen पर घटा दूंगा ताकि रिक्त स्थान पर पैड_राइट की आवश्यकता वाले रिक्त स्थान की संख्या को संग्रहित किया जा सके ताकि सब कुछ लंबवत रूप से संरेखित हो सके।

मैं इस तरह से काम कर रहा हूं, मुझे जो चाहिए वह संग्रहीत नहीं किया गया है, लेकिन सिर्फ यह सोच रहा है कि यह बेवकूफ है या कोई बेहतर तरीका जानता है, कृपया मेरी मदद करें।

जब मल्टीबाइट भाषाओं (जापानी, कोरियाई इत्यादि ...) की बात आती है तो मुझे नहीं लगता कि मेरा दृष्टिकोण काम करेगा क्योंकि उनके पात्र एक स्थान से बड़े होंगे और यह एक गड़बड़ी खत्म हो जाएगा।

क्या कोई मेरी मदद कर सकता है?

+4

यह केवल तभी काम कर सकता है जब टेक्स्ट मोनोस्पेस फ़ॉन्ट में प्रदर्शित होता है। – Roman

+3

हू? मल्टीबाइट आपके txtfile में अधिक रिक्त स्थान नहीं लेता है (/ नहीं होना चाहिए)। – PeeHaa

+1

यदि कोई कॉलम है जो आप अपेक्षा कर रहे हैं उससे अधिक व्यापक है तो आप क्या करेंगे? –

उत्तर

11

यह सिर्फ एक विचार है।

पहिया को पुन: पेश न करें। टेबल प्रतिपादन मुश्किल है, केवल पाठ का उपयोग करके प्रतिपादन तालिकाएं और भी कठिन है।

टेक्स्टबेस वाले ब्राउज़र हैं जिनका उपयोग कमांड लाइन, जैसे लिंक्स द्वारा किया जा सकता है। आप अपनी HTML तालिका को फ़ाइल में लिख सकते हैं, उस फ़ाइल को टेक्स्टबेस वाले ब्राउज़र में पास कर सकते हैं और अपना आउटपुट ले सकते हैं।

नोट: टेक्स्टबेस वाले ब्राउज़र आमतौर पर एक खोल में उपयोग किए जाते हैं, जो आमतौर पर मोनोस्पेस में प्रदर्शित होता है। यह एक शर्त है।

लिंक्स और डब्ल्यू 3 एम दोनों विंडोज़ पर उपलब्ध हैं। टेक्स्ट-आधारित टेबल रेंडरर की जटिलता को स्पष्ट करने के लिए, W3m पर एक नज़र डालें, जो ओपन सोर्स है। These 3000 lines of code केवल HTML टेबल प्रदर्शित करने के लिए हैं।

अद्यतन

कोड उदाहरण:

$table = '<table><tr><td>foo</td><td>bar</td></tr></table>'; //this contains your table 
$html = "<html><body>$table</body></html>"; 

//write html file 
$tmpfname = tempnam(sys_get_temp_dir(), "tblemail"); 

$handle = fopen($tmpfname, "w"); 
fwrite($handle, $html); 
fclose($handle); 

$text = shell_exec("w3m.exe -dump \"$tmpfname\""); 
unlink($tmpfname); 

echo "<pre>$text</pre>"; 

w3m.exe जरूरतों अपने काम निर्देशिका में किया जाना है।

(इसे आजमाया नहीं गया)

+0

धन्यवाद, समस्या यह है कि यह रूपांतरण स्वचालित होना चाहिए और हमारे कंपनी सॉफ़्टवेयर का एक हिस्सा है जो एक विंडो सर्वर पर चलाया जाता है, इसलिए मैं वास्तव में लिंक्स – Olizt

+1

इंस्टॉल नहीं कर सकता, ओह, मैंने सोचा कि यह स्वचालित हो। विचार इसे स्वचालित करना था। PHP फ़ाइल लिखता है और ब्राउज़र (shell_exec) निष्पादित करता है। मैं एक कोड exmaple – Roman

+0

@Olizt ऊपर देखेंगे: "lynx और w3m दोनों विंडोज़ पर उपलब्ध हैं"! – feeela