Juntar (Merging) dois arquivos do word (.doc)

5 respostas
M

Bom dia.

Estou com um problema sério. Preciso unificar (merging) dois arquivos do word (.doc) e manter a formatação do mesmo. Já tentei com a api apache poi. Mas meu texto está perdendo a formatação.

Tem alguma outra api que eu possa usar?

obrigado a todos que ajudarem.

5 Respostas

B

Você consegue fazer isso com VBA, por acaso? Pode ser que os dois documentos não possam ser juntados porque têm definições diferentes para os tipos de parágrafos.

M

Eu não tentei fazer em VBA.

Com a api apache poi, eu consegui fazer a junção, porém o texto perde a formatação.
Fiz usando HWPFDocument e utilizando o Range.

teria como manter a formatação utilizando este componente?

B

Eu perguntei se usando VBA você consegue manter a formatação desejada, porque como é um componente do próprio Word e escrito pela própria Microsoft não deve sofrer de problemas do tipo “não foi feita uma engenharia reversa completa do formato .DOC, portanto o POI não consegue fazer tal tipo de coisas” (ignoro se o POI tenha tal tipo de limitação porque nunca o usei).
Talvez sofra de outros problemas, do tipo “só funciona se houver uma cópia licenciada do Office nessa máquina etc.”, ou então “que não seja possível fazer um merge preservando a formatação”. É uma coisa que não sei, só estou perguntando para você porque você pode tentar ver se isso consegue preservar a formatação ou não.

M

com esse código eu consigo uma copia exara do arquivo.

HWPFDocument doc2 = new HWPFDocument(new FileInputStream("D:\\origem.doc"));
        OutputStream out = new FileOutputStream("D:\\destino.doc");
        doc2.write(out);
        
        out.flush();
        out.close();

agora com esse, eu consigo pegar somente o texto.

HWPFDocument doc = new HWPFDocument(new FileInputStream("D:\\result.doc"));  
            Range range = doc.getRange();  
  
              
            //I can get the entire Document and insert it in the tmp.doc  
            //However any formatting in my word document is lost.  
            HWPFDocument doc2 = new HWPFDocument(new FileInputStream("D:\\origem.doc"));  
            Range range2 = doc2.getRange();  
            range.insertAfter(range2.text());  
            
            OutputStream out = new FileOutputStream("D:\\result.doc");  
            doc.write(out);  
            out.flush();  
            out.close();
M

Com o código abaixo, eu consigo fazer o merging entre os arquivos, porém eu perco a formatação e as imagens.

// POI apparently cant create a document from scratch, 
// so we need an existing empty dummy document 
HWPFDocument doc = new HWPFDocument(new FileInputStream(D:\\tmp.doc)); 
Range range = doc.getRange(); 


//I can get the entire Document and insert it in the tmp.doc 
//However any formatting in my word document is lost. 
HWPFDocument doc2 = new HWPFDocument(new FileInputStream(D:\\doc1.doc)); 
Range range2 = doc2.getRange(); 
range.insertAfter(range2.text()); 

//I can get the information (text only) for each character run/paragraph or section. 
//Again any formatting in my word document is lost. 
HWPFDocument doc3 = new HWPFDocument(new FileInputStream(D:\\doc2.doc)); 
Range range3 = doc3.getRange(); 
for(int i=0;irange3.numCharacterRuns();i++){ 
CharacterRun run3 = range3.getCharacterRun(i); 
range.insertAfter(run3.text()); 
} 

OutputStream out = new FileOutputStream(D:\\result.doc); 
doc.write(out); 
out.flush(); 
out.close();

alguma dica de como manter a formatação e as imagens?

att,

Criado 13 de agosto de 2012
Ultima resposta 14 de ago. de 2012
Respostas 5
Participantes 2