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가 충돌합니다.
내가 누락 된 단계 (일련의 단계)가 있습니까? 아니면 기본적으로이 문제가 있습니까? 교체 텍스트의 길이가 대체 된 텍스트의 길이와 같지 않으므로 카운터를 조정해야합니까?
감사
getClass().getResourceAsStream("/path/to/document/templates/RMA FORM.doc");
의 당신은 POI 3.8 베타 4를 시도? 최근에 HWPF에서 .DOC 처리에 대한 많은 작업이 있었기 때문에 고정되어 있음을 알 수 있습니다. – Gagravarr3.8 베타 4로 시도했지만 문서를 열 수는 있지만 내용이 심하게 손상되었습니다. 나는 심지어 프로그램에서 업데이트를 제거하려고 시도 했으므로 .doc을 열고 다시 작성하면 데이터 손상이 발생합니다. – user497087
POI bugzilla에서 버그를 가장 잘보고하고 문제 파일을 업로드하는 것이 가장 좋습니다 – Gagravarr