zoukankan      html  css  js  c++  java
  • springboot 富文本 导出word 、pdf

    1.导出word

    添加依赖

    <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.14</version>
            </dependency>

    实现层代码

    private void downloadWord(HttpServletResponse response, Resource resource) {
            String title = resource.getTitle();
            String text = resource.getContent();
            try {
                //word内容
                String content="<html><body>" +
                        "<p style="text-align: center;"><span style="font-family: 黑体, SimHei; font-size: 24px;">"
                        + title + "</span></p>" + text + "</body></html>";
                byte b[] = content.getBytes("GBK");  //这里是必须要设置编码的,不然导出中文就会乱码。
                ByteArrayInputStream bais = new ByteArrayInputStream(b);//将字节数组包装到流中
    
                /*
                 * 关键地方
                 * 生成word格式 */
                POIFSFileSystem poifs = new POIFSFileSystem();
                DirectoryEntry directory = poifs.getRoot();
                DocumentEntry documentEntry = directory.createDocument("WordDocument", bais);
                //输出文件
    //            request.setCharacterEncoding("utf-8");
                response.setContentType("application/msword");//导出word格式
                response.addHeader("Content-Disposition", "attachment;filename=" +
                        new String(title.getBytes("GB2312"),"iso8859-1") + ".doc");
                ServletOutputStream ostream = response.getOutputStream();
                poifs.writeFilesystem(ostream);
                bais.close();
                ostream.close();
                poifs.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    2.导出pdf

    添加依赖

    <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itextpdf</artifactId>
                <version>5.5.11</version>
            </dependency>
    
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itext-asian</artifactId>
                <version>5.2.0</version>
            </dependency>
    
            <dependency>
                <groupId>com.itextpdf.tool</groupId>
                <artifactId>xmlworker</artifactId>
                <version>5.5.8</version>
            </dependency>

    压缩并导出实现代码

    private void downloadPdf(HttpServletResponse response, Resource resource) {
            String content = resource.getContent();
            content = MyUtil.handleConvertPdfContent(content);
            String rootDir = System.getProperty("user.dir")+"/";
            String pdfDir = rootDir+"temp/pdf/";
            String pdfFileName = resource.getTitle()+".pdf";
            try {
                String path = pdfDir + pdfFileName;
                File pdfFileDir = new File(pdfDir);
                if (!pdfFileDir.exists()) {
                    pdfFileDir.mkdirs();
                }
    
                FileOutputStream pdfOut = new FileOutputStream(path);
    
                // 第一步 创建文档实例 文章pdf导出+压缩包下载
                Document document = new Document();
                // 第二步 获取PdfWriter实例 写入文件到目录 pdfDir + responseFileName
                PdfWriter writer = PdfWriter.getInstance(document, pdfOut);
                // 第三步 打开文档
                document.open();
                //获取 XMLWorkerHelper实例
                XMLWorkerHelper work = XMLWorkerHelper.getInstance();
                //解析html文件,创建pdf文档
                work.parseXHtml(writer, document, new ByteArrayInputStream(content.getBytes()));
                // 第五部 操作完成后必须执行文档关闭操作。
                document.close();
                writer.close();
                pdfOut.close();
    
                // 压缩pdf文件
                String zipDir = rootDir + "temp/zip/";
                String zipPath = zipDir + resource.getTitle() + ".zip";
                File zipFile = new File(zipPath);
                File pdfFile1 = new File(path);
                ZipUtil.zip(zipFile, false, pdfFile1);
    
                // 将zip file写入response流
                //设置response内容
                String zipFileName = resource.getTitle() + ".zip";
                // 这里中文名字导致了下载报错 暂不解决
                String responseFileName = new String("download.zip".getBytes(), "utf-8");
                response.reset(); // 非常重要
                ServletOutputStream responseOutputStream = response.getOutputStream();
                response.setContentType("application/octet-stream; charset=utf-8");
                response.setHeader("Content-Disposition", "attachment; filename=" + responseFileName);
                InputStream in = new FileInputStream(zipPath);
                int len = 0;
                byte[] buffer = new byte[1024];
                while ((len = in.read(buffer)) > 0) {
                    responseOutputStream.write(buffer, 0, len);
                }
                in.close();
                responseOutputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                FileUtil.delAllFile(rootDir + "/temp");
            }
        }
    ⎛⎝官萧何⎠⎞一只快乐的爪哇程序猿;公司官网:www.csbwbd.com;邮箱:1570608034@qq.com
  • 相关阅读:
    France '98
    【笔记】《通俗详细地讲解什么是P和NP问题》的概念记录
    130831组队赛-Regionals 2011, Asia
    Android 解屏幕锁与点亮屏幕
    Android 点亮屏幕
    利用FFT 计算生成离散解析信号
    hdu5246 超级赛亚ACMer
    用srvctl命令配置service
    MySQL优化之——权限管理
    JS 点击复制Copy插件--Zero Clipboard
  • 原文地址:https://www.cnblogs.com/guanxiaohe/p/14596592.html
Copyright © 2011-2022 走看看