Я использую этот пример в своем проекте. Все в порядке, и замена текста тоже хороша, но в моем выходном текстовом файле, который должен быть «центрирован», выравниваются влево. Входной файл - .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();
}
}
}
Я думаю, вы можете использовать файл docx - разархивировать его, заменить содержимое и zip назад. Я лично делаю это для файлов ods/odt. – user1516873
@ user1516873 Я разработал собственную связанную с docx часть, используя проект POI, прежде чем проект POI получил сцепление с docx. В формате DOCX есть тонкости, где простая замена контента нарушает вещи. Конечно, во многих сценариях это работает, но если нужно быть уверенным, что он работает, то приходится сталкиваться с серьезными дополнительными усилиями. –
@RainerSchwarze Я возьму записку об этом, спасибо. Для формата OpenOffice у меня нет такой проблемы. – user1516873