2016-11-10 14 views
1

빠른 도움이 필요합니다. 보고서를 생성하는 Java 프로그램을 작성하려고합니다. docx 파일에 보고서 템플릿이 있습니다.commons.io.FileUtils를 사용하여 docx 파일을 읽고 쓰는 방법은 무엇입니까?

내가 원하는 것은 해당 docx 파일을 템플릿으로 사용하고 여러 레코드에 여러 번 데이터를 넣은 다음 새 docx 파일에 작성하는 것입니다. 주요한 것은 포맷팅과 들여 쓰기를 docx 파일 안에 유지하기를 원한다는 것입니다. 총알 데이터입니다. 그리고 그게 바로 문제입니다.

다음은 당신이 볼 수 있듯이, 나는 Fileutils의 읽기 및 방법을 쓰기 사용 UTF_8 인코딩을 사용하고

public void readWriteDocx(HashMap<String, String> detailsMap) { 
    try { 
     File reportTemplateFile = new File("ReportTemplate.docx"); 
     File actualReportFile = new File("ActualReport.docx"); 

     StringBuilder preReport = new StringBuilder(); 
     preReport.append("Some details about pre report goes here...: "); 
     preReport.append(System.lineSeparator()); 

     String docxContent = ""; 
     for (Map.Entry<String, String> entry : detailsMap.entrySet()) { 
      docxContent = FileUtils.readFileToString(reportTemplateFile, StandardCharsets.UTF_8); 

      // code to fetch and get data to insert into docxContent 

      docxContent = docxContent.replace("$filename", keyFilename); 
      docxContent = docxContent.replace("$expected", expectedFile); 
      docxContent = docxContent.replace("$actual", actualFile); 
      docxContent = docxContent.replace("$reportCount", String.valueOf(reportCount)); 
      docxContent = docxContent.replace("$diffMessage", key); 

      FileUtils.writeStringToFile(actualReportFile, docxContent, StandardCharsets.UTF_8, true); 

     } 
     preReport.append(FileUtils.readFileToString(actualReportFile, StandardCharsets.UTF_8)); 
     System.out.print(preReport.toString()); 

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

, 위의 작업을 처리하는 코드의 조각이다. 그것은 단지 추측이며, 나는 똑같은 것에 대해 확신하지 못합니다. 내가 새로 생성 된 docx 파일 내용을 문자열 작성기에 추가하려고 콘솔에 같은 내용을 인쇄하지만 보조입니다. 중요한 것은 docx가 제대로 작성되어야한다는 것입니다. 그러나 운이 없다.

이 메시지가 출력되면 이상한 문자가 표시되고 읽을 수 없습니다. 새로 생성 된 docx 파일을 열려고해도 열리지 않습니다.

올바른 형식으로 데이터를 가져 오려면 어떻게해야합니까? 이 보고서를 생성하기 위해 템플릿으로 사용하고있는 ReportTemplate.docx의 이미지 파일을 첨부하고 있습니다. 내가 사용하고 공유지를-IO-2.4.jar 할 수 있다면 안내하시기 바랍니다

ReportTemplate.docx file

. 고마워.

답변

0

doc docx 파일 또는 docx4j 작성 및 편집에는 Apache POI을 사용할 수 있습니다. 그렇지 않으면이 라이브러리가없는 doc 또는 docx 파일을 편집 할 수있는 간단한 방법이 없습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 POI를 사용한 적이 없다. 그것은 내가 템플릿으로 docx 파일을 사용하는 다음 동적으로 입력하고 다양한 반복에 대한 데이터를 추가하고 결국 모든 docx 파일에 모든 데이터를 쓸 수있게됩니까? – WebNoob

+0

네, 이것을 쉽게 할 수 있습니다. 여기에서 [예제] (http://stackoverflow.com/questions/22615594/replacing-variables-in-a-word-document-template-with-java) –

+0

을 찾을 수 있습니다. 도움이되었습니다. 나는 그 링크를 사용하고 몇 가지 코드를 시도했다. 그 문제에 직면 해있다. 여기에 새 질문을 만들었습니다. http://stackoverflow.com/questions/40547493/java-apache-poi-read-write-from-doc-file-issue 도움이되는지 확인하려면 :-) – WebNoob