Java 从jsp生成Docx(或doc)

Java 从jsp生成Docx(或doc),java,jsp,apache-poi,docx,docx4j,Java,Jsp,Apache Poi,Docx,Docx4j,首先,如果我的英语不是很好,我很抱歉 我正在寻找一种解决方案来生成jsp页面的word版本。我测试了许多解决方案,但似乎没有一个能正常工作。给我更好结果的人是用MIME来表示: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""> <%@ page language="java" contentType="application/msword; charset=UTF-8" %> 但是这

首先,如果我的英语不是很好,我很抱歉

我正在寻找一种解决方案来生成jsp页面的word版本。我测试了许多解决方案,但似乎没有一个能正常工作。给我更好结果的人是用MIME来表示:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
<%@ page language="java" contentType="application/msword; charset=UTF-8" %>

但是这个解决方案只适用于IE,并强制在Word中打开页面。但在其他浏览器(chrome或firefox)下,它会将我的页面代码下载到.jsp中

另一个解决方案是使用POI,一个我没有成功设置的JavaAPI

提前感谢,


William

既然您想到了使用POI,我建议您使用docx4j,请按照此进行设置

要导入docx4j库,请下载最新的docx4j.jar并添加项目构建路径,或使用以下maven项目依赖项

<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j</artifactId>
    <version>3.2.0</version>
</dependency>
希望这能解决您的问题。

您混淆了.doc和transfer的生成。Naresh kumar建议的Apache POI或docx4j用于在服务器上生成.doc或.docx文件。而
contentType=“application/msword;charset=UTF-8”
是针对transfert的:它只是向客户声明下面的内容应该是一个msword文档

生成jsp页面的word版本很难理解:jsp允许在文本文档(通常是HTML页面)中包含动态元素,但可以是纯txt或XML。但是.doc或.docx是二进制格式,必须使用适当的工具直接通过servlet生成

您还可以查看RTF格式。它是msword文档的文本表示。由于它是一种文本格式,可以使用JSP页面在RTF页面中包含动态元素,然后声明
contentType=“application/RTF;charset=UTF-8”


根据上的页面,微软在2008年发布了RTF的最新版本,因此您也可以尝试使用或。这两种格式都允许通过XML生成文档,但请注意,最终的文档是包含其他XML文件的zip文件,因此它仍然是二进制格式。

我已经尝试使用docx4j,但我也没有成功设置它:(我正在尝试。我将.jar放在WEB-INF/lib中,但我想我必须从我的jsp导入lib?你正在做的是从一个应该是docx格式的jsp生成一个PDF。我真的怀疑这是OP想要的,即使docx4j确实是一个生成docx文档的好工具。至少如果我能生成一个PDF,我会接受它。)我找到了一个docx的解决方案:/I我建议这种方法只是因为@WilliamN使用了POI。事实上,如何创建文档对我来说并不重要,因为我可以保存和修改它。最简单的方法是最好的:)我将查看RTF并打开XMLformat@WilliamN:IMHO您应该首先通过docx4j或Apache POI在servlet中生成并保存docx文件服务器端,然后直接从servlet输出。无需JSP。将XHTML转换为docx内容,因此您可以创建一个使用该内容的自定义JSP标记,并将其包装在您的JSP内容是什么?
InputStream is = new FileInputStream(new File("your jsp file"));
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(is);
PdfSettings pdfSettings = new PdfSettings();
OutputStream out = new FileOutputStream(new File("your pdf file"));
PdfConversion converter = new org.docx4j.convert.out.pdf.viaXSLFO.Conversion(wordMLPackage);
converter.output(out, pdfSettings);