使用 Apache POI Word 编写一个 docx 文件 JAVA
Write a docx file using Apache POI Word JAVA
我正在使用 Apache POI Word 在 java 中创建一个 docx 文件。
现在我正在使用下面的代码
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.
这里的问题是您正在检索一个字符串中的所有文本。您应该使用 "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;
}
我正在使用 Apache POI Word 在 java 中创建一个 docx 文件。
现在我正在使用下面的代码
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.
这里的问题是您正在检索一个字符串中的所有文本。您应该使用 "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;
}