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"를 포함 가정 해 봅시다),하지만 깨진 워드 파일을 만듭니다 :
여기 내 코드입니다. 어떻게해야합니까?
죄송합니다. POI 수정을 제안 할 수는 없지만 시작하기 만하면 [JODReports]와 같은 다른 무료 옵션을 고려해 볼 수 있습니다. [1] 또는 [Docmosis] [2]. 그것들은 편리하지만, 포맷 변환을 돕기 위해 OpenOffice를 설치해야하기 때문에 더 큰 인프라 요구 사항이 있습니다. [1] : http://jodreports.sourceforge.net/ [2] : http://www.docmosis.com –
고마워요,하지만 불행히도 OpenOffice에 의존 할 수는 없습니다. Docmosis는 WinWord 파일 작업에 대해 언급하고 있지만 API에서 찾을 수없는 텍스트 대체 방법이 필요합니다. – Amalgovinus
나는 동일한 문제가있다. 심지어 제거 된 대체. 난 단지'HWPFDocument doc = new HWPFDocument (새로운 POIFSFileSystem (new FileInputStream (path)));에 의해 입력 파일을 읽었을 때'try (FileOutputStream out = new FileOutputStream (filePath)) { doc.write (out); }'. 그러나 손상된 파일을 생성합니다. – Bagdat