मुझे जावा एप्लिकेशन लिखना होगा जो डॉक्स फाइलों को मर्ज कर सकता है। कोई सुझाव?क्या कोई जावा लाइब्रेरी है (शायद poi?) जो docx फ़ाइलों को मर्ज करने की अनुमति देता है?
उत्तर
निम्नलिखित जावा APIs जावा के साथ OpenXML एमएस वर्ड दस्तावेजों को संभालने के लिए उपलब्ध हैं:
एक और था, लेकिन मुझे अब नाम याद नहीं है।
आपकी कार्यात्मक आवश्यकता के अनुसार: दो दस्तावेज़ों को विलय करना परिणाम प्राप्त करने के लिए तकनीकी रूप से मुश्किल है क्योंकि एंड्यूसर अपेक्षा करेगा। अधिकांश एपीआई इसकी अनुमति नहीं देंगे। आपको वांछित जानकारी को दो दस्तावेज़ों से निकालने की आवश्यकता होगी और फिर इस जानकारी के आधार पर एक नया दस्तावेज़ बनाएं।
आप कैसे तय करते हैं कि किस का उपयोग करना है? मैं अपाचे पीओआई और ओपनऑफिस.org के बीच हूं। दूसरे को खुले कार्यालय को स्थापित करने की आवश्यकता होगी जो मुझे लगता है कि यह प्रदर्शन में एक हिट होगा, क्या यह सच है? – Roger
यह तकनीकी रूप से मुश्किल क्यों है, इसके लिए http://www.docx4java.org/blog/2010/11/merging-word-documents/ – JasonPlutext
देखें मुझे लगता है कि इसका उपयोग करने का सबसे अच्छा तरीका है कि आप इसका उपयोग कैसे करें दस्तावेजों। आप http://webapp.docx4java.org/OnlineDemo/forms/upload_MergeDocx.xhtml – JasonPlutext
यह सुनिश्चित करता है कि पीओआई docx
फ़ाइलों के साथ काम कर सकता है। क्या आप यह समझने की कोशिश कर रहे हैं कि उन्हें कैसे विलय करना है?
How to extract plain text from a DOCX file using the new OOXML support in Apache POI 3.5?
एसोसिएशन एपीआई अब तक शब्द डॉक या डॉक्क्स फाइलों को विलय करने के लिए सबसे अच्छा है लेकिन यह मुफ़्त या ओपन सोर्स नहीं है, अगर आपको एक फ्री और ओपन सोर्स टूल्स की ज़रूरत है तो आप कुछ एपीआई चुन सकते हैं, आप कर सकते हैं
http://www.esupu.com/open-source-office-document-java-api-review/
लिंक टूटा .... – paul
POI के साथ मेरी समाधान है, उन पर यहां एक समीक्षा लगता है:
public static void merge(InputStream src1, InputStream src2, OutputStream dest) throws Exception {
OPCPackage src1Package = OPCPackage.open(src1);
OPCPackage src2Package = OPCPackage.open(src2);
XWPFDocument src1Document = new XWPFDocument(src1Package);
CTBody src1Body = src1Document.getDocument().getBody();
XWPFDocument src2Document = new XWPFDocument(src2Package);
CTBody src2Body = src2Document.getDocument().getBody();
appendBody(src1Body, src2Body);
src1Document.write(dest);
}
private static void appendBody(CTBody src, CTBody append) throws Exception {
XmlOptions optionsOuter = new XmlOptions();
optionsOuter.setSaveOuter();
String appendString = append.xmlText(optionsOuter);
String srcString = src.xmlText();
String prefix = srcString.substring(0,srcString.indexOf(">")+1);
String mainPart = srcString.substring(srcString.indexOf(">")+1,srcString.lastIndexOf("<"));
String sufix = srcString.substring(srcString.lastIndexOf("<"));
String addPart = appendString.substring(appendString.indexOf(">") + 1, appendString.lastIndexOf("<"));
CTBody makeBody = CTBody.Factory.parse(prefix+mainPart+addPart+sufix);
src.set(makeBody);
}
Docx4j मेरी समाधान के साथ
है:
public class MergeDocx {
private static long chunk = 0;
private static final String CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
public void mergeDocx(InputStream s1, InputStream s2, OutputStream os) throws Exception {
WordprocessingMLPackage target = WordprocessingMLPackage.load(s1);
insertDocx(target.getMainDocumentPart(), IOUtils.toByteArray(s2));
SaveToZipFile saver = new SaveToZipFile(target);
saver.save(os);
}
private static void insertDocx(MainDocumentPart main, byte[] bytes) throws Exception {
AlternativeFormatInputPart afiPart = new AlternativeFormatInputPart(new PartName("/part" + (chunk++) + ".docx"));
afiPart.setContentType(new ContentType(CONTENT_TYPE));
afiPart.setBinaryData(bytes);
Relationship altChunkRel = main.addTargetPart(afiPart);
CTAltChunk chunk = Context.getWmlObjectFactory().createCTAltChunk();
chunk.setId(altChunkRel.getId());
main.addObject(chunk);
}
}
इस उत्तर के लिए धन्यवाद आपका पोई कोड मेरे लिए काम करता है, लेकिन मेरे मामले में मुझे .doc फ़ाइलों को मर्ज करने की भी आवश्यकता है, इसलिए मुझे org.apache.poi.hwpf.HWPFDocument का उपयोग करना होगा। तो अपने डॉक्स कोड का पालन करके, मैं .doc फ़ाइल से xml प्रारूप प्राप्त करना चाहता हूं लेकिन मुझे ऐसा करने का कोई तरीका नहीं मिला। किसी भी विचार की सराहना की जाएगी :) – AmiraGL
यह पूरी तरह से काम किया। धन्यवाद! –
@atott POI कोड मेरे लिए काम करता है, लेकिन यदि दस्तावेज़ में संलग्न छवियां हैं, तो मर्ज छवियों के बाद वहां नहीं है, सभी पाठ सटीक स्वरूपण के साथ विलय करें। –
- 1. क्या कोई आरआईए फ्रेमवर्क है जो मुझे सी ++ का उपयोग करने की अनुमति देता है?
- 2. कोई भी अजगर समर्थन वेक्टर मशीन लाइब्रेरी जो ऑनलाइन सीखने की अनुमति देता है?
- 3. बिगडिसीमल के लिए जावा गणित लाइब्रेरी जो शून्य मानों की अनुमति देता है
- 4. Apache POI लाइब्रेरी
- 5. क्या MATLAB की त्रुटि पट्टी के लिए कोई प्रतिस्थापन है जो डेटा को ब्रश करने की अनुमति देता है?
- 6. क्या कोई ऐसा उपकरण है जो क्रोंटैब प्रविष्टियों के विज़ुअलाइजेशन की अनुमति देता है?
- 7. क्या कोई शब्दकोश <स्ट्रिंग, ऑब्जेक्ट> संग्रह है जो एकाधिक कुंजी की अनुमति देता है?
- 8. क्या शब्दकोश/सॉर्टेडलिस्ट का कोई विकल्प है जो डुप्लिकेट की अनुमति देता है?
- 9. क्या डेल्फी के लिए कोई संपादन नियंत्रण है जो पथ संपादन की अनुमति देता है?
- 10. क्या कोई फ़ाइल डिफ टूल है जो अपवादों की अनुमति देता है?
- 11. क्या कोई भी वेब ब्राउजर लिखने की अनुमति देता है?
- 12. जावा तिथि प्रारूप जो अनुमति देता है -/या। तारीख
- 13. क्यों संकलक रूपांतरण को संकुचित करने की अनुमति देता है
- 14. JMock अन्य विधि को कॉल करने की अनुमति देता है
- 15. क्या जावा शून्य प्रकारों को अनुमति देता है?
- 16. क्या विजुअल स्टूडियो में कोई विस्तार है जो कार्यों को कार्यों के रूप में चलाने की अनुमति देता है?
- 17. क्या कोई जावा लाइब्रेरी है जो यूआरएन को मान्य करती है?
- 18. क्या कोई जावा बाइटकोड अनुकूलक है जो बेकार गेटोस को हटा देता है?
- 19. क्या कोई अच्छी जावा नेटवर्किंग लाइब्रेरी है?
- 20. क्या कोई अंतर्निहित जावा प्रकार है जो निष्पादित (टी टी) विधि की गारंटी देता है?
- 21. क्या यूनिक्स फ़ंक्शंस की जावा लाइब्रेरी है?
- 22. क्या कोई लाइब्रेरी है जो सी ++ या सी
- 23. केसीफ़िंडर 'आपको फ़ाइलों को सूचीबद्ध करने की अनुमति नहीं है।'
- 24. क्या है docx फ़ाइल
- 25. क्या एक Django ModelField है जो कई विकल्पों के लिए कई विकल्पों की अनुमति देता है?
- 26. कोई वितरित कैश सिस्टम जो सामग्री टैगिंग की अनुमति देता है?
- 27. क्या कोई जावा लाइब्रेरी है जो दो ऑब्जेक्ट्स को "diff" कर सकती है?
- 28. डिफ टूल जो तुलना मार्कअप को सहेजने की अनुमति देता है
- 29. क्या सी # डबल अर्धविराम की अनुमति देता है; ; यदि हां, तो क्या कोई विशेष तरीका है?
- 30. जावा JTabbedPane टैब को केवल तभी स्विच करने की अनुमति देता है जब सही
"विलय" करके, क्या आपका मतलब कुछ सरल प्रकार का संयोजन है? या कुछ fancier? क्या मर्ज हिस्सा या डॉक्स (दस्तावेज़ के बजाए) भाग में कठिनाई है? –
मर्ज को एक ही परिणाम देना चाहिए जैसे कि हम मैन्युअल रूप से एमएस ऑफिस में पहले दस्तावेज़ खोलते हैं, Ctrl + C दबाएं, फिर दूसरा दस्तावेज़ खोलें, इसके अंत में जाएं और Ctrl + V दबाएं। – Roman