هل هناك أي مكتبة Java (ربما POI؟) والتي تسمح بدمج ملفات docx؟ [مغلق

StackOverflow https://stackoverflow.com/questions/2494549

  •  21-09-2019
  •  | 
  •  

سؤال

أحتاج إلى كتابة تطبيق Java يمكنه دمج ملفات Docx. أي اقتراحات؟

هل كانت مفيدة؟

المحلول

تتوفر واجهات برمجة تطبيقات Java التالية للتعامل مع مستندات Word OpenXML MS مع Java:

كان هناك واحد آخر ، لكنني لم أعد أتذكر الاسم.

فيما يتعلق بمتطلباتك الوظيفية: دمج مستندتين أمر صعب من الناحية الفنية لتحقيق النتيجة كما يتوقع enduser. معظم واجهة برمجة التطبيقات لن تسمح بذلك. ستحتاج إلى استخراج المعلومات المطلوبة من مستندتين ثم إنشاء مستند جديد استنادًا إلى هذه المعلومات بنفسك.

نصائح أخرى

مع 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);
    }
}

بالتأكيد يبدو أن POI يمكن أن تعمل مع docx الملفات. هل تحاول معرفة كيفية دمجهم؟

كيفية استخراج نص عادي من ملف docx باستخدام دعم OOXML الجديد في Apache POI 3.5؟

Aspose API هو الأفضل حتى الآن لدمج ملفات Word Doc أو Docx حتى الآن ولكن هذا ليس مجانيًا أو مفتوحًا ، إذا كنت بحاجة إلى أدوات مجانية ومفتوحة ، فهناك اثنين من واجهة برمجة التطبيقات التي يمكنك الاختيار من بينها ، يمكنك العثور على مراجعة على هنا ،

http://www.esupu.com/open-source-ofrice-document-java-api-review/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top