使用Apache POI下载Word文档会生成损坏的文档

时间:2018-06-27 14:36:36

标签: apache-poi httpresponse java-6 office-2013

我使用Apache POI API创建了一个word文档,可以将文件写入本地计算机,并且效果很好,但是当写入response.getOutputStream()以允许用户使用浏览器下载时,word文档已损坏。

这是我的代码:

String docFile =  "inv_export_012.docx";
FileOutputStream fos= new FileOutputStream("C:\\temp\\" + docFile);

//set response headers
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
response.setHeader("Content-Disposition","attachment; filename=" + docFile);
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "0");

//create docx format using XWPFDocument
XWPFDocument wordDocument = new XWPFDocument();
XWPFParagraph p1 = wordDocument.createParagraph();
p1.setAlignment(ParagraphAlignment.LEFT);
XWPFRun r1 = p1.createRun();
r1.setText("Invoice Number: 00000000XXX");
r1.addCarriageReturn();

//write document to local C: drive
//this step works well and I can successfully create the document
wordDocument.write(fos);

//set content length
response.setHeader("Content-Length", String.valueOf(new File("C:\\temp\\" + docFile).length()));
fos.close();
wordDocument.write(response.getOutputStream());

还尝试了二进制格式,但也不起作用。

response.setContentType("application/octet-stream");
  • Java版本:1.6(尚无法更新到新版本)
  • Apache POI:3.16
  • 浏览器:Internet Explorer 11(我的应用程序仅通过IE认证,因此无法使用其他浏览器 浏览器)
  • Office 2013

它运行良好,并且在我的本地桌面上成功创建了文档。如果我尝试使用浏览器下载并直接打开(或保存并打开),则会出现以下错误,指示文档已损坏。单击以打开文档仍会打开该文档,但是谁知道为什么我收到此消息?任何帮助,将不胜感激!

enter image description here

单击“确定”,我会收到以下消息:

enter image description here

如果我单击“是”,则确实会打开文档。

编辑:06/29 -更新了代码以生成* .docx格式。还在响应头中添加了Content-Length。尝试通过删除Content-Length也无法使用。

1 个答案:

答案 0 :(得分:0)

发现POI 3.16存在此问题,当我升级到Apache POI 4.0.0 jar时,此问题已解决。