2010-08-02 3 views
1

WinWord 문서에서 특정 텍스트를 바꿔야합니다. 문제는 replaceText 함수를 사용하여 Range에서 수행하는 모든 텍스트 대체가 대체 및 대체 문자열이 모두 동일한 길이가 아니면 끊어진 WinWord 파일을 생성한다는 것입니다. 우리는 역동적 인 내용을 다룰 것이므로 그렇게하지 않을 것입니다.Apache POI를 사용하여 WinWord doc에서 텍스트 바꾸기

Range 개체 사양 : http://poi.apache.org/apidocs/org/apache/poi/hwpf/usermodel/Range.html#replaceText(java.lang.String, java.lang.String의)

에서는 replaceText 기능 오프셋의 어떤 종류를 지정하는 세번째 매개 변수, int를 가지고 있습니다. 아마도 이것이 해결책 일 수도 있지만 param은 음수 값을 처리 할 수 ​​없기 때문에 offset (replacement.length() - replaced.length())가 양수가 아니면 대체를 수행하기가 어렵거나 불가능합니다. 그러나, 나는 그것이 부정적인 것이 필요할지도 모른다. 어쨌든, 두 개의 다른 매개 변수가 같은 길이가 아닌 경우 문서의 아무 것도이 오프셋 매개 변수가 필요하다는 것을 암시하는 것처럼 보일 수 없습니다. 이

 String inputFilename = "C:\\\a.doc"; 

     String outputFilename = "C:\\b.doc"; 
     POIFSFileSystem fs = null; 
     FileInputStream fis = new FileInputStream(inputFilename); 
     fs = new POIFSFileSystem(fis); 

     HWPFDocument doc = new HWPFDocument(fs); 

     Range range = doc.getRange(); 
     range.replaceText("caaaaaaake", "piiiie"); 


     FileOutputStream fos = new FileOutputStream(outputFilename); 
     doc.write(fos); 

     fis.close(); 
     fos.close(); 

코드는 아무런 문제가 실행되지 않습니다 (의이 a.doc 그냥 "caaaaaaake"를 포함 가정 해 봅시다),하지만 깨진 워드 파일을 만듭니다 :

여기 내 코드입니다. 어떻게해야합니까?

+0

죄송합니다. POI 수정을 제안 할 수는 없지만 시작하기 만하면 [JODReports]와 같은 다른 무료 옵션을 고려해 볼 수 있습니다. [1] 또는 [Docmosis] [2]. 그것들은 편리하지만, 포맷 변환을 돕기 위해 OpenOffice를 설치해야하기 때문에 더 큰 인프라 요구 사항이 있습니다. [1] : http://jodreports.sourceforge.net/ [2] : http://www.docmosis.com –

+0

고마워요,하지만 불행히도 OpenOffice에 의존 할 수는 없습니다. Docmosis는 WinWord 파일 작업에 대해 언급하고 있지만 API에서 찾을 수없는 텍스트 대체 방법이 필요합니다. – Amalgovinus

+0

나는 동일한 문제가있다. 심지어 제거 된 대체. 난 단지'HWPFDocument doc = new HWPFDocument (새로운 POIFSFileSystem (new FileInputStream (path)));에 의해 입력 파일을 읽었을 때'try (FileOutputStream out = new FileOutputStream (filePath)) { doc.write (out); }'. 그러나 손상된 파일을 생성합니다. – Bagdat

답변

1

poi 3.8에 도달하면이 문제가 해결된다고 생각합니다. beta5로 작업 할 때이 코드는 저에게 효과적입니다. 생성 된 단어 파일은 caaaaaake가 사용 된 파일에서 piiiie로 열 수 있습니다.

관련 문제