Existe alguma biblioteca Java (talvez POI?) Que permite mesclar arquivos DOCX? [fechado

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

  •  21-09-2019
  •  | 
  •  

Pergunta

Preciso escrever um aplicativo Java que possa mesclar arquivos docx. Alguma sugestão?

Foi útil?

Solução

As seguintes APIs Java estão disponíveis para lidar com documentos do Word Openxml MS com Java:

Havia mais um, mas não me lembro mais do nome.

Quanto ao seu requisito funcional: a fusão de dois documentos é tecnicamente complicada para alcançar o resultado como o EndUser esperaria. A maioria das APIs não permite isso. Você precisará extrair as informações desejadas de dois documentos e criar um novo documento com base nessas informações.

Outras dicas

Com POI, minha solução é:

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

Com docx4j minha solução é:

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

Com certeza parece que PoI pode trabalhar com docx arquivos. Você está tentando descobrir como mesclá -los?

Como extrair texto simples de um arquivo DOCX usando o novo suporte de Ooxml no Apache POI 3.5?

ASPO API é a melhor até agora para mesclar arquivos do Word Doc ou Docx até agora, mas isso não é gratuito ou de código aberto, se você precisar de uma ferramenta de código aberto e gratuito, há algumas API que você pode escolher, você pode encontrar uma revisão sobre eles aqui,

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top