使用aspose-words完成word和PDF、HTML之间的相互转换

实现word和PDF、HTML之间的相互转换使用aspose-words完成

因为工作需要把word转为PDF实现在线预览、word的内容放到富文本编辑器实现在线编辑、支持富文本内容在线导出为word文档等,就需要把word——>html/pdf——>word之间来回转换。也是翻阅了很多资料,有通过poi完成word和HTML互相转换的,最后自己也发现还是有问题,用poi生成的word在解析就解析出错。也有通过openoffice完成的,感兴趣的可以去了解下。话不多说老规矩,上代码。最后说一下仅限个人学习,请勿商用。

  1. 先导包,pom文件添加aspose-words的依赖
      <!--aspose-words-->
        <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-words</artifactId>
            <version>15.8.0</version>
        </dependency>
    
  2. 将word文件转为pdf
     //将word文件转为pdf文件
     public static boolean wordToPdf(String inPath, String outPath) {
        FileOutputStream os = null;
        try {
            // 新建一个空白pdf文档
            File file = new File(outPath);
            os = new FileOutputStream(file);
            Document doc = new Document(inPath);
            doc.save(os, SaveFormat.PDF);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            if (os != null) {
                try {
                    os.flush();
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return true;
     }
     //程序使用多的还是将word转为pdf流给前端做在线预览
     //将输入word的InputStream流转为输出pdf的OutputStream流
     public static boolean wordToPdf(InputStream in,HttpServletResponse response) {
        try {
            Document doc = new Document(in);
            doc.save(response.getOutputStream(), SaveFormat.PDF);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }   
    
    
  3. 读取word的内容,获取为HTML的字符串。图片全部转为base64编码。
      //将word的内容转为html返回字符串,图片全部转为base64编码。
      public static String wordToHtml(InputStream in) {
        ByteArrayOutputStream htmlStream = new ByteArrayOutputStream();
        String htmlText = "";
        try {
            Document doc = new Document(in);
            HtmlSaveOptions opts = new HtmlSaveOptions(SaveFormat.HTML);
            opts.setExportXhtmlTransitional(true);
            opts.setExportImagesAsBase64(true);
            opts.setExportPageSetup(true);
            doc.save(htmlStream,opts);
            htmlText = new String(htmlStream.toByteArray(), StandardCharsets.UTF_8);
            htmlStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return htmlText;
    }
    
  4. 将html内容转为word,支持doc和docx格式。
     public static boolean htmlToWord(HttpServletResponse response, String html) {
        try {
            //创建临时文件
            //根据你的需要来决定生成doc还是docxx
            File htmlFile = File.createTempFile("basis", ".docx");
            FileOutputStream out = new FileOutputStream(htmlFile);
            Document doc = new Document();
            DocumentBuilder builder = new DocumentBuilder(doc);
            builder.insertHtml(html);
            //生成docx文件
            doc.save(out, SaveOptions.createSaveOptions(SaveFormat.DOCX));
            //生成Word文档之后,关闭输入流
            out.close();
            OutputStream outputStream = response.getOutputStream();
            //输出文件
            InputStream inputStream = new FileInputStream(htmlFile);
            IOUtils.copy(inputStream, outputStream);
            inputStream.close();
            //关闭程序时,删除临时文件
            String fileName=htmlFile.getName();
            if (htmlFile.delete()) {
                log.info("临时文件:{}删除成功!",fileName);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    
  5. 工具类写完了,下面来看下效果。
    先创建一个测试的word名字就叫text2.docx。里面包含图片,文字样式。
    在这里插入图片描述
     	@ApiOperation(value = "word转pdf")
        @GetMapping("/wordToPDF")
        public Result wordToPDF(HttpServletResponse response) throws IOException {
            return Result.success(WordAsposeUtil.wordToPdf(new FileInputStream("F:\\test2.docx"),response));
        }
    
    效果还是可以的。
    在这里插入图片描述
  6. 为了测试简单直接把解析word到HTML再到word写为一个方法。
    @ApiOperation(value = "生成word")
    @GetMapping("writeWord")
    public Result writeWord(HttpServletResponse response) {
        try {
            html = WordAsposeUtil.wordToHtml(new FileInputStream("F:\\test2.docx"));
            //设置word格式
            response.setContentType("application/msword");
            response.setCharacterEncoding("UTF-8");
            //设置返回的文件名称和类型
            response.addHeader("Content-Disposition", "attachment;filename=" +
                    new String("测试".getBytes("GB2312"), "iso8859-1") + ".docx");
            if (WordAsposeUtil.htmlToWord(response, html) {
                return Result.success();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    看效果,生成的word是保护模式,需要启用编辑。
    在这里插入图片描述
    这是控制台打印的html内容,因为base64太长了直截图了一部分
    在这里插入图片描述
    将转换的html内容放到一个新建的HTML文件中,可以直接预览
    在这里插入图片描述
  7. 本次分享就到这里了。需要jar包和去水印,私聊联系我。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值