2011-09-15 5 views
3

Apache POI를 사용하여 Microsoft Word 문서를 업데이트하려고합니다. msword 문서는 "$ {place.holder}"형식의 여러 자리 표시자를 포함하는 템플릿이며 소유자가 특정 값으로 대체해야합니다. 지금까지 얻은 것은Apache POI로 MSWord 문서 업데이트

private void start() throws FileNotFoundException, IOException { 

    POIFSFileSystem fsfilesystem = null; 
    HWPFDocument hwpfdoc = null; 

    InputStream resourceAsStream = getClass().getResourceAsStream("/path/to/document/templates/RMA FORM.doc");  
    try { 
     fsfilesystem = new POIFSFileSystem(resourceAsStream); 
     hwpfdoc = new HWPFDocument(fsfilesystem); 
     Range range = hwpfdoc.getRange(); 

     range.replaceText("${rma.number}","08739"); 
     range.replaceText("${customer.name}", "Roger Swann"); 

     FileOutputStream fos = new FileOutputStream(new File("C:\\temp\\updatedTemplate.doc")); 
     hwpfdoc.write(fos); 
     fos.flush(); 
     fos.close(); 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

오류없이 실행됩니다. Hex 편집기를 사용하여 출력 파일을 보면 자리 표시자가 프로그램으로 대체되었음을 알 수 있습니다. 그러나 MSWord로 문서를 열려고하면 MSWord가 충돌합니다.

내가 누락 된 단계 (일련의 단계)가 있습니까? 아니면 기본적으로이 문제가 있습니까? 교체 텍스트의 길이가 대체 된 텍스트의 길이와 같지 않으므로 카운터를 조정해야합니까?

감사

+0

getClass().getResourceAsStream("/path/to/document/templates/RMA FORM.doc");의 당신은 POI 3.8 베타 4를 시도? 최근에 HWPF에서 .DOC 처리에 대한 많은 작업이 있었기 때문에 고정되어 있음을 알 수 있습니다. – Gagravarr

+0

3.8 베타 4로 시도했지만 문서를 열 수는 있지만 내용이 심하게 손상되었습니다. 나는 심지어 프로그램에서 업데이트를 제거하려고 시도 했으므로 .doc을 열고 다시 작성하면 데이터 손상이 발생합니다. – user497087

+0

POI bugzilla에서 버그를 가장 잘보고하고 문제 파일을 업로드하는 것이 가장 좋습니다 – Gagravarr

답변

0

사용 new FileInputStream() 대신

+0

을 사용하여 Word 서식 파일을 사용하는 방법에 대한 설명이 도움이 될만한 이유를 명확히 할 수 있습니까? – Gagravarr

관련 문제