2009-03-30 11 views
44

में माइक्रोसॉफ्ट वर्ड (.docx) दस्तावेज़ बनाना एक रूबी एप्लिकेशन में वर्ड दस्तावेज़ (.docx) बनाने का कोई आसान तरीका है? असल में, मेरे मामले में यह एक लिनक्स सर्वर से एक रेल अनुप्रयोग है।रूबी

एक Prawn लेकिन पीडीएफ के बजाय DOCX के लिए समान मणि बहुत अच्छा होगा!

उत्तर

40

जैसा कि देखा गया है, रूबी में ओपन एक्सएमएल दस्तावेज़ों में हेरफेर करने के लिए कोई पुस्तकालय नहीं दिखता है, लेकिन OpenXML Developer में ओपन एक्सएमएल दस्तावेज़ों के प्रारूप पर पूर्ण दस्तावेज है।

यदि आप चाहते हैं कि प्रत्येक उपयोगकर्ता के लिए एक मानक दस्तावेज़ (एक फॉर्म लेटर) की एक प्रतिलिपि भेजना है, तो यह काफी सरल होना चाहिए कि एक डॉक्स एक ज़िप फ़ाइल है जिसमें निर्देशिका पदानुक्रम में विभिन्न भाग होते हैं। एक DOCX "टेम्पलेट" है जिसमें सभी भागों और पेड़ संरचना शामिल हैं जिन्हें आप all उपयोगकर्ताओं (बिना वास्तविक सामग्री के) भेजना चाहते हैं, फिर बस नए (या मौजूदा संशोधित) टुकड़े बनाएं जिनमें उपयोगकर्ता-विशिष्ट सामग्री हो और इंजेक्ट करें इसे उपयोगकर्ता को भेजने से पहले ज़िप (DOCX फ़ाइल) में।

उदाहरण के लिए: आपके पास document-template.xml हो सकता है जिसमें प्रिय [USER-PLACEHOLDER]: शामिल हैं। एक उपयोगकर्ता दस्तावेज़ अनुरोध करता है, तो आप उपयोगकर्ता के नाम के साथ [USER-PLACEHOLDER] की जगह है, तो your-template.docx ज़िप फ़ाइल के लिए जिसके परिणामस्वरूप document.xml जोड़ने (जो सभी छवियों और अन्य भागों आप वर्ड दस्तावेज़ में चाहते होते हैं) और उपयोगकर्ता के लिए कि जिसके परिणामस्वरूप दस्तावेज़ भेज ।

ध्यान दें कि यह मामूली बात है अंदर संरचना और भागों के प्रारूप का पता लगाने के लिए यदि आप .zip करने के लिए एक .docx फ़ाइल का नाम बदलें। आप कोड या कोड के साथ किसी भी ज़िप मैनिपुलेशन टूल या प्रोग्रामेटिक रूप से छवियों या अन्य हिस्सों को आसानी से हटा या प्रतिस्थापित कर सकते हैं।

कच्चे एक्सएमएल से पूरी तरह से कस्टम सामग्री के साथ एक नया Word दस्तावेज़ जनरेट कर रहा है काम आसान बनाने के लिए एक एपीआई के उपयोग के बिना बहुत मुश्किल होगा। यदि आपको वास्तव में ऐसा करने की आवश्यकता है, तो आप Mono इंस्टॉल करने पर विचार कर सकते हैं, फिर Open XML Format SDK 1.0 का उपयोग करके अपने ओपन एक्सएमएल दस्तावेज़ बनाने के लिए VB.NET, C# या IronRuby का उपयोग करें। चूंकि आप ओपन एक्सएमएल दस्तावेज़ों में हेरफेर करने के लिए Microsoft.Office.DocumentFormat.OpenXml.Packaging Namespace का उपयोग कर रहे हैं, इसलिए इसे मोनो में ठीक काम करना चाहिए, जो एसडीके की आवश्यकता के सब कुछ का समर्थन करता है।

+0

मैंने कुछ जटिल डॉक्क्स टेम्पलेट्स को स्लाइस करने और स्लाइस का उपयोग करके एक कस्टम दस्तावेज़ बनाने के लिए एक छोटी उपयोगिता लिखी है: http://github.com/bagilevi/docx_builder – Leventix

+0

अभी भी इस विधि का उपयोग करके एक टेबल लूप के चारों ओर अपने सिर को पाने का प्रयास कर रहा है –

+0

मैंने टेम्पलेट से docx फ़ाइल उत्पन्न करने के लिए एक और विकल्प जोड़ा है https://github.com/jawspeak/ruby-docx-templater यह ज़िप्बर्बी का उपयोग करता है और स्मृति में प्रक्रिया करता है। (वास्तव में यह एक फोर्क संस्करण का उपयोग करता है जो रूबीज़िप के ज़िप :: मॉड्यूल से टकरा नहीं है)। – JAWspeak

7

मैं जानता हूँ कि अगर आप .doc विस्तार के साथ एक शब्द दस्तावेज़ के रूप में एक HTML दस्तावेज़ की सेवा, यह वचन ठीक में खुलेगा। बस कुछ भी कल्पना मत करो।

संपादित करें: यहां क्लासिक एएसपी का उपयोग करने का एक उदाहरण है। http://www.aspdev.org/asp/asp-export-word/

+0

धन्यवाद, लेकिन यह एक गंदे हैक की तरह थोड़ा लगता है, है ना? :-) इसके अलावा: आरटीएफ का उपयोग करते समय सुरक्षा चिंताओं क्या हैं? – Javier

+2

आरटीएफ फाइलों के साथ क्या चिंताएं हैं? – Brian

1

आप Windows पर चला रहे हैं, जाहिर है, यह WIN32OLE की बात और वर्ड COM ऑब्जेक्ट के साथ कुछ दर्द है।

संभावना है कि आपकी * * निक्स पर्यावरण से सेवा हो रही है। वर्ड 2007 "Microsoft Office Open XML" प्रारूप (* .docx) का उपयोग करता है जिसे उपयुक्त compatibility pack from Microsoft का उपयोग करके खोला जा सकता है।

अधिक हाल ही में कार्यालय क्षुधा (2002/XP और 2003 में कम से कम) के कुछ their own XML formats जो भी useable हो सकता था।

मुझे प्रक्रिया को आसान बनाने के लिए किसी भी रूबी टूल से अवगत नहीं है, दुख की बात है।

यह स्वीकार्य बनाया जा सकता है, तो मुझे लगता है कि मैं नाम दिया-html फ़ाइल मार्ग नीचे जाना करने के लिए इच्छुक हो जाएगा। मैंने वर्डएक्सपी से एचटीएमएल के रूप में एक दस्तावेज़ को सहेजा, इसे एक .doc में बदल दिया और बिना किसी समस्या के इसे खोला।

+0

नामित-एचटीएमएल फ़ाइल मार्ग जैसा कि आप वर्णन करते हैं, यह मेरे मामले के लिए काम नहीं करेगा। मैं एक ऑफिस वर्ड एप्लिकेशन में एचटीएमएल फाइलों को पूर्व-निर्माण नहीं कर सकता और इसे .doc पर पुनर्नामित नहीं कर सकता और यदि मैं अपने सर्वर पर सादे एचटीएमएल फाइलों के साथ ऐसा करता हूं तो उन्हें आईई द्वारा डॉक्टर-फाइल के रूप में पहचाना नहीं जाता है। – Javier

+0

मैं Win32OLE का प्रशंसक नहीं हूं क्योंकि यह फ़ाइल में हेरफेर करने के लिए शब्द इंजन का उपयोग करता है। –

6

आप Apache POI का उपयोग कर सकते हैं। यह जावा में लिखा गया है, लेकिन integrates with Ruby as an extension

+2

आपके इनपुट के लिए धन्यवाद! क्या आप किसी कार्यान्वयन के बारे में जानते हैं जहां वास्तव में एक शब्द दस्तावेज़ बनाने के लिए अपाचे पीओआई का उपयोग किया गया था (न केवल इसे पार्स करें)? – Javier

+0

क्षमा करें, मुझे इसके अलावा इसके बारे में बहुत कुछ पता नहीं है। एक बार मैं 'create_and_save का उपयोग – ykaganovich

+0

docx4j (अपने प्रोजेक्ट) docx फ़ाइलों के साथ काम करना पर केंद्रित है, तुम मेरी जिंदगी इस रत्न @Nick बनाने के लिए ... – JasonPlutext

2

ग्रांट के उत्तर के आगे, आप वर्ड को "फ़्लैट ओपीसी" फ़ाइल भी भेज सकते हैं, जो अनिवार्य रूप से डॉक्स को अनजिप किया गया है और एक एक्सएमएल फ़ाइल बनाने के लिए संयोजित है। इस तरह, आप एक फ़ाइल में जगह ले सकता है [USER-PLACEHOLDER] और इसके साथ किया जाना (यानी कोई ज़िप करना या unzipping)।

0

मैं एक ही समस्या का सामना करना पड़ा। दुर्भाग्य से मैं एक्सएमएल में हेरफेर नहीं कर सका क्योंकि मेरे ग्राहकों चाहिए खुद को टेम्पलेट्स में भरने के लिए। और ऐसा करने के लिए हमेशा संभव नहीं है (उदाहरण के लिए, मैक के लिए कार्यालय इस अनुमति नहीं देता है)।

इस समस्या का समाधान के रूप में, मैं एक साधारण मणि, जो एम्बेडेड माणिक के साथ एक rtf दस्तावेज़ टेम्पलेट के रूप में इस्तेमाल किया जा सकता था: https://github.com/eicca/rtf-templater

मैं इसे परीक्षण किया है और यह रिपोर्ट और दस्तावेजों को भरने के लिए ठीक काम करता है। हालांकि, जटिल लूप और शर्तों के लिए बुरी तरह प्रदर्शित करता है। बाहर इस GitHub रेपो

4

यह एक तरीका है डॉसी (doccyapp.com) में एक एपीआई है जो आप उपयोग कर सकते हैं। डॉक्स, ओडीटी और पेजों का समर्थन करता है और यदि आप

3

ग्रांट वैगनर द्वारा सुझाए गए तकनीक के समान ही तकनीक का उपयोग करते हुए मैंने शब्द रत्न के लिए रूबी एचटीएमएल बनाया है जो आपको आसानी से वर्ड डॉक्स फाइलों को आउटपुट करने की अनुमति दे सकता है आपका रूबी ऐप आप http://github.com/nickfrandsen/htmltoword पर यह भी देख सकते हैं - बस यह एक एचटीएमएल स्ट्रिंग गुजरती हैं और यह एक इसी शब्द docx फ़ाइल पैदा करेगा।

def show 
    respond_to do |format| 
    format.docx do 
     file = Htmltoword::Document.create params[:docx_html_source], "file_name.docx" 
     send_file file.path, :disposition => "attachment" 
    end 
    end 
end 

आशा है कि आपको यह उपयोगी लगेगा। यदि आपको इसके साथ कोई समस्या है तो एक गिथब मुद्दा खोलने के लिए स्वतंत्र महसूस करें।

+0

बहुत धन्यवाद (हालांकि यह उन लोगों के रूप में अच्छी तरह से संभालती है, के रूप में xlsx के खिलाफ) – VKatz

+0

बचाया 'विधि यह ज़िपित फ़ाइल में दिए गए पथ पर बचाया लेकिन खोजने में असमर्थ' .docx 'प्रारूप फ़ाइल सलाह ..Please !!! – VKatz

+0

क्या यह मणि आपको पृष्ठ अभिविन्यास को नियंत्रित करने की अनुमति देता है? –

3

प्रकटीकरण: मैं docxtemplater परियोजना के नेता हूँ।

मुझे पता है कि आप एक रूबी समाधान की तलाश में हैं, लेकिन क्योंकि अन्य सभी समाधान केवल आपको बताते हैं कि वैश्विक स्तर पर इसे कैसे करें, आपको एक लाइब्रेरी देने के बिना जो आप चाहते हैं, यहां जेएस या नोडजेएस (दोनों में काम करता है)

DocxTemplater Library

Demo of the library

तुम भी कमांडलाइन में इसका इस्तेमाल कर सकते हैं:

npm install docxtemplater -g 

docxtemplater <configFile> 

----config.docxFile: The input file in docx format 
----config.outputFile: The outputfile of the document 
+4

रूबी प्रश्न के लिए जेएस उदाहरण देकर बुरा स्वाद है। –

+0

वहाँ भी एक कमांड लाइन इंटरफेस है, तो हो सकता है इस परियोजनाओं के लिए उपयोगी Node.js – edi9999

5

यह एक पुराना सवाल है लेकिन एक नया जवाब है। यदि आप एक वर्ड (docx) दस्तावेज़ में एक HTML दस्तावेज़ चालू करना चाहते हैं, तो बस 'htmltoword' मणि का उपयोग करें:

https://github.com/nickfrandsen/htmltoword

मुझे यकीन है कि यही कारण है कि इस सवाल का जवाब क्रीप था और हर कोई templating पोस्टिंग शुरू कर दिया नहीं कर रहा हूँ समाधान, लेकिन यह ओपी के सवाल का जवाब देता है।पीडीएफ के बजाय शब्द को छोड़कर, प्रोन की तरह।

अद्यतन:

वहाँ भी है pandoc और pandoc के लिए एक API आवरण docverter कहा जाता है। पैंडोक एक हैकेल लाइब्रेरी है क्योंकि दोनों के पास थोड़ा जटिल इंस्टॉल है।

+2

का उपयोग नहीं कर रहा 'इस्तेमाल किया htmltoword' और यह सिफारिश नहीं कर सकते हैं हो सकता है। यह केवल पैराग्राफ और हेडर को संभाल सकता है। यदि आप अपने रूबी ऐप में शक्तिशाली दस्तावेज़ रूपांतरण चाहते हैं, तो मैं पांडोक का सुझाव देता हूं, हालांकि डॉकवर्टर या पैंडोक-रूबी जैसे रूबी रैपर। पीडीएफ रूपांतरण के लिए लाटेक्स पुस्तकालयों की आवश्यकता होती है - यह लगभग 2 जीबी पुस्तकालय है। निष्पक्ष चेतावनी :) – Archonic