进一步优化spire.doc的导出效率(改用aspose.words)

进一步优化spire.doc的导出效率(改用aspose.words),第1张

进一步优化spire.doc的导出效率(改用aspose.words) 1.上篇中的spire.doc的文章虽然可以解决,从freemarke导出xml形式的word转换成正常的word的问题,但是时间实在是长的发指,经过半天的面向百度方式,终于找到了另外一种去替换spire.doc这个依赖。 2.因为freemarker 导出的word,看文件是doc或者docx形式,但是其实是xml(OOXML)形式的文件。 3.第一步
		如果您现在使用的是spire.doc, 请先将pom文件中的sprire.doc的依赖删除
4.第二步 将外部的jar包引入项目中 这里需要下载一个 aspose-words-21.1-jdk17.jar 破解的包,可以自己百度找,不一定是这个版本,但是一定要破解的,如果你有钱那就买吧

链接:https://pan.baidu.com/s/1h-gxRYHt51VHVJ93Muax7Q?pwd=1dew
提取码:1dew

第三步 将下载的jar包引入项目中(打包后也有用)请看这篇文章

项目引入外部的一个jar包

第四步 核心代码 在这里已经默认你已经通过freemarker生成了文件,现在是将这个文件转成真正的word文件,因为只有这样手机端才能够打开这个word,如果没有这个需求其实你可以直接放在浏览器中下载而不用使用这个东西。
			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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/992265.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存