SpringBoot中word、PDF和Excel文档下载实现

情景:项目中有时会出现,在服务上下载文件

实现代码如下:

 /**
     * 操作手册下载
     */
    @RequestMapping(value = "/downFile")
    public void downFile(String downType, HttpServletResponse response) {
        try {
            if (StringUtils.isNotEmpty(downType)) {
                ServletOutputStream ouputStream = null;
                InputStream is = null;
                byte[] bytes = null;
                Connection conn = null;
                String fileName="服务系统操作手册.docx";
                String url = "";
                try {
                    String basePath = Global.getUserfilesBaseDir();//服务器上存放文件路径
                    url ="服务系统操作手册.docx";//文件名称 我这为空展示下载docx格式文件下载
                    String destpath = basePath + url;
                    File destfile = new File(destpath);
                    String type = url.substring(url.lastIndexOf(".") + 1);
                    if (destfile.exists()) {
                        FileInputStream inputStream = new FileInputStream(destfile);
                        bytes = IOUtils.toByteArray(inputStream);
                        response.setContentType("application/msword;charset=UTF-8");
                        if ("pdf".equals(type)) {
                            response.setContentType("application/pdf;charset=UTF-8");
                        } else if ("doc".equals(type) || "docx".equals(type)) {
                            response.setContentType("application/msword;charset=UTF-8");
                        } else if ("xls".equals(type) || "xlsx".equals(type)) {
                            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
                        }
                        response.setContentLength(bytes.length);
                        ouputStream = response.getOutputStream();
                        ouputStream.write(bytes, 0, bytes.length);
                        ouputStream.flush();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    throw e;
                } finally {
                    if (ouputStream != null) {
                        ouputStream.close();
                    }
                    if (conn != null) {
                        conn.close();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            LoggerUtils.debug(logger, "print " + e);
        }
    }

ok  ^ _ ^ 这次就到这里啦

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot本身并没有提供将Excel转换成图片的功能,但可以使用第三方库来实现。其一个比较常用的库是Apache POI和Apache Batik。 Apache POI 是Java编程语言的免费开源软件库,用于处理Microsoft Office文档文件格式,包括WordExcel和PowerPoint等。而Apache Batik是一个用于在Java处理SVG格式的库。 下面是使用Apache POI和Apache Batik将Excel转换成图片的示例代码: ```java import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.batik.dom.svg.SVGDOMImplementation; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.util.IOUtils; import org.w3c.dom.DOMImplementation; import org.w3c.dom.svg.SVGDocument; import org.xhtmlrenderer.swing.Java2DRenderer; import org.xhtmlrenderer.util.XRLog; import javax.imageio.ImageIO; import java.io.OutputStream; public class ExcelToImageConverter { public static byte[] convertToPNG(InputStream inputStream) throws IOException, InvalidFormatException { Workbook workbook = WorkbookFactory.create(inputStream); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); workbook.getSheetAt(0).setSelected(true); DOMImplementation domImpl = SVGDOMImplementation.getDOMImplementation(); SVGDocument document = (SVGDocument) domImpl.createDocument(SVGDOMImplementation.SVG_NAMESPACE_URI, "svg", null); Java2DRenderer renderer = new Java2DRenderer(workbookToHtml(workbook)); renderer.setBufferedImageType(BufferedImage.TYPE_INT_RGB); renderer.setBundlesEnabled(false); renderer.layout(); renderer.createImage(outputStream); outputStream.flush(); outputStream.close(); return outputStream.toByteArray(); } private static String workbookToHtml(Workbook workbook) { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); workbook.write(outputStream); String html = new String(outputStream.toByteArray(), "UTF-8"); html = html.replaceAll("[\r\n]+", " "); return html; } catch (IOException e) { XRLog.exception("Can't convert workbook to string", e); return ""; } } public static void convertToPNG(InputStream inputStream, OutputStream outputStream) throws IOException, InvalidFormatException { byte[] pngData = convertToPNG(inputStream); ByteArrayInputStream pngInputStream = new ByteArrayInputStream(pngData); BufferedImage bufferedImage = ImageIO.read(pngInputStream); ImageIO.write(bufferedImage, "png", outputStream); outputStream.flush(); } } ``` 此外,还需要在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.0</version> </dependency> <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-core</artifactId> <version>9.0.16</version> </dependency> <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-pdf</artifactId> <version>9.0.16</version> </dependency> <dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-transcoder</artifactId> <version>1.13</version> </dependency> ``` 这样就可以在Spring Boot项目使用ExcelToImageConverter类将Excel转换为PNG图片了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值