2012-07-21 6 views
1

MS Word 문서를 읽고 쓰는 Java 라이브러리를 찾고 있습니다. 은 내가해야 할 일은 다음과 같습니다MS Word 문서를 Java로 병합

  • 병합 템플릿 파일, .DOT 또는 .DOC을 읽고, DB에서 읽어 일부 데이터로 채우기
  • 걸릴 데이터를 다른 Word 문서에서, 파일 설명과 함께 그 단락 서식 유지

사용자가 파일을 업데이트 할 수 있습니다.

POI Apache 및 UNO OpenOffice를 (를) 검색하여 찾았습니다. 첫 번째 템플릿은 템플릿을 쉽게 읽고 모든 자리 표시자를 DB의 데이터로 쉽게 바꿀 수 있습니다. 두 개 또는 그 이상의 문서를 병합하는 방법에 대해서는 찾지 못했습니다. OpenOffice UNO는 안정적이지만 복잡해 보입니다. 또한 문서를 병합 할 수 있는지 확신 할 수 없습니다.

올바른 방향을 찾고 있습니까?

내가 생각한 또 다른 해결책은 docx로 doc 파일을 변환하는 것이 었습니다. 그런 식으로 우리는 문서를 병합하는 데 도움이되는 더 많은 라이브러리를 발견했습니다. 하지만 어떻게 할 수 있습니까?

감사합니다.

+0

http://stackoverflow.com/questions/2494549/is-there-any-java-library-maybe-poi-which-allows-to-merge-docx-files –

+0

감사하지만, requiriment이었다 .doc 문서! – frengo

+0

문서를 "병합"한다는 것은 무엇을 의미합니까? 하나의 콘텐츠를 다른 콘텐츠에 추가하는 것뿐입니다. –

답변

1

앞서 언급 한 네 가지 기능 (데이터 채우기, 템플릿/문서 병합, DOC 형식 및 자바 인터페이스)을 제공하므로 Docmosis을 살펴볼 수 있습니다. 두 가지 맛이 있습니다 (다운로드, 온라인 서비스). 그러나 클라우드 서비스의 무료 평가판에 가입하여 Docmosis가 원하는 것을 할 수 있는지 확인한 다음 (아무 것도 설치하지 않아도 됨) 온라인으로 읽을 수 있습니다 선적 서류 비치.

문서 사이의 꽤 괜찮은 변환을 수행하는 오픈 오피스를 개발자 가이드 설치 지침에서 볼 수 있습니다. UNO API에는 몇 가지 합병증이 있습니다. Docoosis 또는 JODReports를 사용하여 프로젝트를 UNO에서 직접 격리 할 것을 제안합니다.

희망이 있습니다.

0
import java.io.File; 
import java.util.List; 

import javax.xml.bind.JAXBException; 

import org.docx4j.dml.CTBlip; 
import org.docx4j.openpackaging.exceptions.Docx4JException; 
import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 
import org.docx4j.openpackaging.parts.Part; 
import org.docx4j.openpackaging.parts.PartName; 
import org.docx4j.openpackaging.parts.WordprocessingML.ImageBmpPart; 
import org.docx4j.openpackaging.parts.WordprocessingML.ImageEpsPart; 
import org.docx4j.openpackaging.parts.WordprocessingML.ImageGifPart; 
import org.docx4j.openpackaging.parts.WordprocessingML.ImageJpegPart; 
import org.docx4j.openpackaging.parts.WordprocessingML.ImagePngPart; 
import org.docx4j.openpackaging.parts.WordprocessingML.ImageTiffPart; 
import org.docx4j.openpackaging.parts.relationships.RelationshipsPart; 
import org.docx4j.openpackaging.parts.relationships.RelationshipsPart.AddPartBehaviour; 
import org.docx4j.relationships.Relationship; 

public class MultipleDocMerge { 


    public static void main(String[] args) throws Docx4JException, JAXBException { 
     File first = new File("D:\\Mreg.docx"); 
     File second = new File("D:\\Mreg1.docx"); 
     File third = new File("D:\\Mreg4&19.docx"); 
     File fourth = new File("D:\\test12.docx"); 
     WordprocessingMLPackage f = WordprocessingMLPackage.load(first); 
     WordprocessingMLPackage s = WordprocessingMLPackage.load(second); 
     WordprocessingMLPackage a = WordprocessingMLPackage.load(third); 
     WordprocessingMLPackage e = WordprocessingMLPackage.load(fourth); 

     List body = s.getMainDocumentPart().getJAXBNodesViaXPath("//w:body", false); 
     for(Object b : body){ 
      List filhos = ((org.docx4j.wml.Body)b).getContent(); 
      for(Object k : filhos) 
       f.getMainDocumentPart().addObject(k); 
     } 

     List body1 = a.getMainDocumentPart().getJAXBNodesViaXPath("//w:body", false); 
     for(Object b : body1){ 
      List filhos = ((org.docx4j.wml.Body)b).getContent(); 
      for(Object k : filhos) 
       f.getMainDocumentPart().addObject(k); 
     } 

     List body2 = e.getMainDocumentPart().getJAXBNodesViaXPath("//w:body", false); 
     for(Object b : body2){ 
      List filhos = ((org.docx4j.wml.Body)b).getContent(); 
      for(Object k : filhos) 
       f.getMainDocumentPart().addObject(k); 
     } 


     List<Object> blips = e.getMainDocumentPart().getJAXBNodesViaXPath("//a:blip", false); 
     for(Object el : blips){ 
      try { 

        CTBlip blip = (CTBlip) el; 
        RelationshipsPart parts = e.getMainDocumentPart().getRelationshipsPart(); 
        Relationship rel = parts.getRelationshipByID(blip.getEmbed()); 
        Part part = parts.getPart(rel); 
        if(part instanceof ImagePngPart) 
         System.out.println(((ImagePngPart) part).getBytes()); 
        if(part instanceof ImageJpegPart) 
         System.out.println(((ImageJpegPart) part).getBytes()); 
        if(part instanceof ImageBmpPart) 
         System.out.println(((ImageBmpPart) part).getBytes()); 
        if(part instanceof ImageGifPart) 
         System.out.println(((ImageGifPart) part).getBytes()); 
        if(part instanceof ImageEpsPart) 
         System.out.println(((ImageEpsPart) part).getBytes()); 
        if(part instanceof ImageTiffPart) 
         System.out.println(((ImageTiffPart) part).getBytes()); 
        Relationship newrel = f.getMainDocumentPart().addTargetPart(part,AddPartBehaviour.RENAME_IF_NAME_EXISTS); 
        blip.setEmbed(newrel.getId()); 
        f.getMainDocumentPart().addTargetPart(e.getParts().getParts().get(new PartName("/word/"+rel.getTarget()))); 
       } catch (Exception ex){ 
         ex.printStackTrace(); 
       } } 

     File saved = new File("D:\\saved1.docx"); 
     f.save(saved); 




    } 

} 
+0

설명을 추가하십시오. –