Java-App에서 MS-Word 템플릿으로 새 문서를 열고 싶지만 템플릿 자체 만 편집하면됩니다.템플릿에서 새 문서 만들기
내 상황은 다음과 같습니다. 내 Jar 파일 내부는 단어 템플릿이며 사용자가 지정한 위치로 복사되어 편집 할 수 있습니다. 그런 다음 응용 프로그램은이 편집 된 템플릿을 열고 데이터를 삽입 한 다음 단어로 열 수 있습니다. 이 모든 것은 잘 작동하지만 (Apache-POI 사용), 마지막 단계는 내가 원하는 것만은 아니다.
일반적으로 단어 서식 파일을 두 번 클릭하면 Word에서 아무데도 저장되지 않은 새 문서 (문서 1)가 열립니다. 필자의 경우, Word는 편집을위한 단어 템플릿 (blablaMyTemplate이라는 제목)을 엽니 다. 즉, 문서를 만들어야하는 이미 저장 한 템플릿을 의미합니다. Java를 사용하여 템플릿에서 새로 생성 된 문서를 어떻게 열 수 있습니까?
이것은 (생략 시도/캐치 스트림 폐쇄) 내 코드입니다 :
File bbb = new File(new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).getParentFile().getParentFile().getAbsolutePath() + "/blablaMyTemplate.dotx");
if (!bbb.exists()) { //copy file to outside of jar for user editing
Files.copy(Buchungsbegleitblatt.class.getResourceAsStream("bbb.dotx"), bbb.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
File tmp = File.createTempFile("bbb", ".dotx"); //create tmp file to insert data
InputStream in = new FileInputStream(bbb);
OutputStream out = new FileOutputStream(tmp);
XWPFDocument document = new XWPFDocument(in);
//here, some data is filled into the document using Apache-POI (omitted, because it works fine)
document.write(out);
if (Desktop.isDesktopSupported()) {
Desktop.getDesktop().open(tmp); //this opens the template for editing, it does not create a new doc from template
}
문제는 마지막 줄 내에있는,하지만 난 여기 부를 수있는 그 밖의 무엇을 모른다. 이 작업을 수행하는
정말 고마워요! 난 그냥 약간의 후속 질문 : winword.exe 실제로 존재하는 경우 검색 방법이 있습니까? 그렇지 않으면 오류가 분명히 발생합니다 ("windord.exe를 찾을 수 없습니다"등). 그러나 프로세스에서 생성 할 수있는 오류 (예 : 액세스 거부)에 대해 '1'을 반환하므로 나는 단지 그것에 갈 수 없어 ... – user2336377
목표는 무엇입니까? Windows 오류 메시지 방지? 이것은 불가능합니다. 이를 위해 우리는 ** 시작하기 전에 ** 응용 프로그램이 설치되어 있는지 여부에 관계없이 전체 Windows 시스템을 검사해야합니다. 그렇지 않으면,'ProcessBuilder'는 에러 스트림을 출력 스트림과 함께 파일로 리디렉션 할 수 있습니다. 또는'process.getErrorStream();'을 사용하여'Process'에서 Error 스트림을 가져 와서 이것을 읽을 수 있습니다. –
목표는 다음과 같습니다. MSWord가 올바르게 설치되어 있는지 확인하고, 그렇다면'ProcessBuilder'를 사용하여 템플릿에서 새 문서를 시작합니다. 그렇지 않으면 템플릿에서 임시 폴더에 저장된 문서를 만들고 정기적으로'Desktop.open (...)'(예를 들어, LibreOffice를 사용하거나, 사용자가 설치 한 것을 사용)을 사용합니다. 저는 약간 놀아서'process.getErrorStream();'으로 관리 할 수있는 것을 보겠습니다. 도와 줘서 고마워. – user2336377