如果您现在使用的是spire.doc, 请先将pom文件中的sprire.doc的依赖删除
4.第二步 将外部的jar包引入项目中
这里需要下载一个 aspose-words-21.1-jdk17.jar 破解的包,可以自己百度找,不一定是这个版本,但是一定要破解的,如果你有钱那就买吧
链接:https://pan.baidu.com/s/1h-gxRYHt51VHVJ93Muax7Q?pwd=1dew
提取码:1dew
项目引入外部的一个jar包
String tempUrl = tmpFile.getPath(); //这个是你文件的地址,tepFile是要转换的文件(xml形式的word文件)
try {
String transDocxName = tempUrl.replace(".doc", ".docx");//将后缀名字替换也是为了在原有的路径上生成新的文件,到后面一定要删除掉这个文件!不然会积很多文件占用内存
Document doc = new Document(tempUrl);// 原始word路径
File wordFile = new File(transDocxName);// 你要的是这个文件********你拿到这个文件就可以了。
FileOutputStream fileOS = new FileOutputStream(wordFile );
doc.save(fileOS, SaveFormat.DOCX);//这里执行 *** 作
//其实aspose.words 是付费的,会产生前后两个水印,这个时候需要调用这个方法将水印清除
removeAsposeMark(transDocxName);//
fileOS.close();
wordFile.delete();
} catch (Exception e) {
e.printStackTrace();
}
第五步 清除水印的方法
/**
* 使用Aspose.Words会出现前后水印可以通过这个方法去除水印
* @param docFilePath
*/
public static void removeAsposeMark(String docFilePath) {
try (FileInputStream in = new FileInputStream(docFilePath)) {
XWPFDocument doc = new XWPFDocument(OPCPackage.open(in));
List<XWPFParagraph> paragraphs = doc.getParagraphs();
if (paragraphs.size() < 1) {
return;
}
XWPFParagraph firstParagraph = paragraphs.get(0);
XWPFParagraph lastParagraph = paragraphs.get(paragraphs.size() - 1);
if (firstParagraph.getText().contains("Aspose.Words")) {
doc.removeBodyElement(doc.getPosOfParagraph(firstParagraph));
doc.removeBodyElement(doc.getPosOfParagraph(lastParagraph));
}
OutputStream out = new FileOutputStream(docFilePath);
doc.write(out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
总结:
1.这样就完成了,重要的是一定要指定仓库的地址(第三步)这样就能够下载这个依赖,wordFile 就是你转换后的目标文件
2.aspose.words 是收费的,这里只是治标将水印通过word的 *** 作去除第一行和最后一行。
3.aspose.words 的作用不止于此,它还可以不同形式的文件相互进行转换,如有需要请面向百度吧!
4.写到这里其实就完成了下面这些需求和问题:
1).我需要现有的业务数据通过java去生成并且下载一个word(.doc,.docx)文件
答:使用 freemarker
2).使用freemarker 之后发现正常的word 可以打开,但是发送到手机上却显示乱码
答:因为freemarker 生成的是OOXML文件,所以需要对下载的这个文件,进行一次转换
3).如何转换
答: 使用 aspose.words
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)