2014-09-10 1 views
0

내 프로젝트에서이 예제를 사용하고 있습니다. 모든 것이 잘되고 텍스트를 대체하는 것도 좋습니다. 그러나 "센터링"해야하는 출력 텍스트 파일에서는 왼쪽 정렬이됩니다. 입력 파일 - .doc, 나는 문서 형식을 깨뜨리고 있다고 느끼지만 문제가 무엇인지 잘 모르겠습니다. 이 문제를 해결하는 방법?Apache-POI 형식의 .doc 파일 형식의 텍스트 문제

public class HWPFTest { 
    public static void main(String[] args){ 
     String filePath = "F:\\Sample.doc"; 
     POIFSFileSystem fs = null;   
     try {    
      fs = new POIFSFileSystem(new FileInputStream(filePath));    
      HWPFDocument doc = new HWPFDocument(fs); 
      doc = replaceText(doc, "$VAR", "MyValue1"); 
      saveWord(filePath, doc); 
     } 
     catch(FileNotFoundException e){ 
      e.printStackTrace(); 
     } 
     catch(IOException e){ 
      e.printStackTrace(); 
     } 
    } 

    private static HWPFDocument replaceText(HWPFDocument doc, String findText, String replaceText){ 
     Range r1 = doc.getRange(); 

     for (int i = 0; i < r1.numSections(); ++i) { 
      Section s = r1.getSection(i); 
      for (int x = 0; x < s.numParagraphs(); x++) { 
       Paragraph p = s.getParagraph(x); 
       for (int z = 0; z < p.numCharacterRuns(); z++) { 
        CharacterRun run = p.getCharacterRun(z); 
        String text = run.text(); 
        if(text.contains(findText)) { 
         run.replaceText(findText, replaceText); 
        } 
       } 
      } 
     } 
     return doc; 
    } 

    private static void saveWord(String filePath, HWPFDocument doc) throws FileNotFoundException, IOException{ 
     FileOutputStream out = null; 
     try{ 
      out = new FileOutputStream(filePath); 
      doc.write(out); 
     } 
     finally{ 
      out.close(); 
     } 
    } 
} 
+0

docx 파일을 사용할 수 있다고 생각합니다. 압축을 풀고 내용을 바꾸고 지퍼 백. 나는 개인적으로 ods/odt 파일을 위해 그것을한다. – user1516873

+1

@ user1516873 POI 프로젝트가 docx에서 견인을 받기 전에 POI 프로젝트를 사용하여 사용자 지정 docx 관련 파트를 개발했습니다. DOCX 형식의 미묘한 부분이 있습니다. 간단한 형식으로 내용을 바꾸면 내용이 손상됩니다. 물론 여러 시나리오에서 작동하지만, 실제로 작동해야하는 경우 심각한 추가 노력에 직면합니다. –

+0

@RainerSchwarze이 점에 대해 메모 해 드리겠습니다. 감사합니다. OpenOffice 형식의 경우에는 그런 문제가 없습니다. – user1516873

답변

2

.doc 파일을 쓰는 데 HWPF를 사용할 수 없습니다. 그것은 아주 간단한 파일 내용을 위해 작동 할지도 모르지만, 약간 여분은 그것을 끊는다. 나는 당신이 여기에서 운이 없다는 것을 두려워합니다. - 그것이 당신을위한 옵션이라면, 당신은 RTF 파일을 사용하고 그것들에서 작업하기를 원할 것입니다. rtf 확장명을 .doc으로 바꾸면 Word가 제대로 작동합니다 (.doc 확장명이 필요한 경우).

(클라이언트 용 HWPF의 맞춤형 및 작동 방식을 개발했으며 거기에서 얻을 수있는 어려움을 알고 있습니다.) 표준 HWPF 라이브러리는 8 비트 인코딩 외부의 문자가 존재할 때, 그래픽이 삽입되면 텍스트 상자가 사용됩니다 ... .doc 파일의 일부는 Microsoft의 공식 사양과 다른 점이 있습니다. 작동하는 HWPF 라이브러리를 만드는 것은 "간단하지"않으며 spec-reading 및 조사. 버그를 해결하기 위해 길을 가고 싶다면 적어도 반년 정도의 개발 노력이 필요합니다.)

+0

문제에 대한 자세한 설명 주셔서 감사합니다. – Alex85

+0

예, 많은 테이블과 로고를 사용하여 문제가 해결되었습니다. 파일을 .odt 형식으로 저장하고 JODReports를 사용합니다. 출력 파일의 모든 서식 지정 텍스트 - 좋습니다. – Alex85