Я использую Apache POI Word для создания файла docx в java.
Прямо сейчас я использую следующий код
XWPFDocument document = new XWPFDocument();
XWPFParagraph tmpParagraph = document.createParagraph();
XWPFRun tmpRun = tmpParagraph.createRun();
tmpRun.setText(newDocxData);
try {
document.write(new FileOutputStream(new File("C:\\test.docx")));
} catch (FileNotFoundException ex) {
Logger.getLogger(PersonnelFileHandlingStreamAttributesHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(PersonnelFileHandlingStreamAttributesHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
}
Но при этом весь текст помещается в один абзац.
Но я хочу поместить данную строку в документ как есть.
Я попытался преобразовать строку во входной поток и передать ее при создании документа
XWPFDocument document = new XWPFDocument(inputstream);
Но тоже выдает ошибку. Любое решение для этого?
Это образец строки, которую я хочу написать.
10 - SchaumburgIllinois - US xxx 2018-06-28
Certificate of employment
This is to certify that John is currently employed at xxx as Manager.
John has worked at xxx since 07-DEC-00.
Current salary is SalaryPerMonth SalaryCurrencyCode per month, working 100 % of a 40-hour week.
эта строка содержит текст, извлеченный из текстового документа. когда я печатаю его в консоли, он печатается с форматированием. Поэтому я просто хочу создать еще один документ без добавления новых абзацев и всего такого.
Можете ли вы добавить содержимое строки простым коротким способом, чтобы было ясно, чего вы хотите, и что происходит прямо сейчас?
На самом деле я читаю шаблон документа, заменяю некоторые строки и создаю новый файл. Я думаю, это упростит мои требования
@AxelRichter есть идеи, как это сделать?
Забудь это. Поскольку вы говорили о «форматировании», я подумал о более сложном содержании абзацев. С вашим примером строки: разделите ее на «\ n» или на «\ r \ n», а затем создайте абзац и текстовый прогон для каждой части.




Проблема здесь в том, что вы получаете весь текст в одной строке. вам следует проанализировать весь основной элемент документа с помощью "getBodyElements", а затем просмотреть их все и начать абзац для каждого элемента. вот пример того, как это сделать:
public static XWPFDocument MergeDocument(XWPFDocument source, XWPFDocument output){
for(IBodyElement element : source.getBodyElements()) {
if (element instanceof XWPFParagraph) {
XWPFParagraph paragraph = (XWPFParagraph)element;
if (paragraph.getStyleID()!=null){
XWPFStyles styles= output.createStyles();
XWPFStyles stylesdoc2= source.getStyles();
styles.addStyle(stylesdoc2.getStyle(paragraph.getStyleID()));
}
XWPFParagraph x= output.createParagraph();
x.setStyle(((XWPFParagraph) element).getStyle());
XWPFRun runx=x.createRun();
runx.setText(((XWPFParagraph) element).getText());
}
}
return output;
}
Что именно содержит
StringnewDocxData? Откуда это взялось? Вам нужно проанализировать эту строку, чтобы разделить ее на разные абзацы и фрагменты текста.