Java实现PDF在线预览功能(四种方式)

 更新时间:2021年10月28日 08:58:48   作者:戴**  
这篇文章主要介绍了Java实现PDF在线预览功能的四种方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Java实现PDF在线预览

    @RequestMapping("/preview1")
    public void er(HttpServletResponse response){
        File file = new File("G:\\桌面\\Thymeleaf3.0中文翻译文档@www.java1234.com.pdf");
        if (file.exists()){
            byte[] data = null;
            try {
                FileInputStream input = new FileInputStream(file);
                data = new byte[input.available()];
                input.read(data);
                response.getOutputStream().write(data);
                input.close();
            } catch (Exception e) {
                System.out.println(e);
            }
        }else{
            return;
        }
    }
    @ResponseBody
    @RequestMapping("/preview2")
    public void findPdf( HttpServletResponse response) throws IOException{
        response.setContentType("application/pdf");
        FileInputStream in = new FileInputStream(new File("G:\\桌面\\Thymeleaf3.0中文翻译文档@www.java1234.com.pdf"));
        OutputStream out = response.getOutputStream();
        byte[] b = new byte[512];
        while ((in.read(b))!=-1) {
            out.write(b);
        }
        out.flush();
        in.close();
        out.close();
    }
    @ResponseBody
    @RequestMapping("/preview3")
    public void devDoc(HttpServletRequest request, HttpServletResponse response, String storeName) throws Exception {
        request.setCharacterEncoding("UTF-8");
        String ctxPath = request.getSession().getServletContext().getRealPath("");
        String downLoadPath = "G:\\桌面\\Thymeleaf3.0中文翻译文档@www.java1234.com.pdf";
        response.setContentType("application/pdf");
        FileInputStream in = new FileInputStream(new File(downLoadPath));
        OutputStream out = response.getOutputStream();
        byte[] b = new byte[1024];
        while ((in.read(b))!=-1) {
            out.write(b);
        }
        out.flush();
        in.close();
        out.close();
    }
    @ResponseBody
    @RequestMapping("/preview")
    public void download( HttpServletResponse response
                        ) throws IOException {
        String filePath = "G:\\桌面\\Thymeleaf3.0中文翻译文档@www.java1234.com.pdf";
        System.out.println("filePath:" + filePath);
        File f = new File(filePath);
        if (!f.exists()) {
            response.sendError(404, "File not found!");
            return;
        }
        BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
        byte[] bs = new byte[1024];
        int len = 0;
        response.reset(); // 非常重要
        if (true) { // 在线打开方式
            URL u = new URL("file:///" + filePath);
            String contentType = u.openConnection().getContentType();
            response.setContentType(contentType);
            response.setHeader("Content-Disposition", "inline;filename="
                    + "2019年上半年英语四级笔试准考证(戴林峰).pdf");
            // 文件名应该编码成utf-8,注意:使用时,我们可忽略这句
        } else {
            // 纯下载方式
            response.setContentType("application/x-msdownload");
            response.setHeader("Content-Disposition", "attachment;filename="
                    + "2019年上半年英语四级笔试准考证(戴林峰).pdf");
        }
        OutputStream out = response.getOutputStream();
        while ((len = br.read(bs)) > 0) {
            out.write(bs, 0, len);
        }
        out.flush();
        out.close();
        br.close();
    }

Java快捷实现PDF在线预览

本文章利用各个浏览器的内核支持PDF预览功能来做,PDF的预览网上说的最多的是PDF.JS实现预览,也找了好多文章,死活最后实现不了,通过这个方法解决了,如果有PDF.js解决的可以大家沟通交流下。

这里提一下,其他word和excel可以通过aspose代码转换成PDF,也很快有效。可以网上搜下。

方法很简单,首先引入的都是IO的包。

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import org.apache.commons.io.IOUtils;

接下来就是在自己的后台controller里面写个方法。里面file的文件可以通过参数或是封装方式获取,这个里面的流不需要关闭,浏览器会自动获取然后展示。关闭的话浏览器就无法加载!

@RequestMapping(value = "/showpdf")
    public void showpdf(HttpServletRequest request, HttpServletResponse response, Model model) {
        try {
            File file = new File("D:/xyptFile/java.pdf");
            FileInputStream fileInputStream = new FileInputStream(file);
            response.setHeader("Content-Type", "application/pdf");
            OutputStream outputStream = response.getOutputStream();
            IOUtils.write(IOUtils.toByteArray(fileInputStream), outputStream);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

文章来源:从其他各个文章中测试验证,取得最优方案。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring boot配置文件加解密详解

    Spring boot配置文件加解密详解

    这篇文章主要给大家介绍了关于Spring boot配置文件加解密的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • Java实现双端链表LinkedList

    Java实现双端链表LinkedList

    本文主要介绍了Java实现双端链表LinkedList,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 如何通过idea给web项目打war包

    如何通过idea给web项目打war包

    这篇文章主要介绍了如何通过idea给web项目打war包问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java switch case数据类型原理解析

    Java switch case数据类型原理解析

    这篇文章主要介绍了Java switch case数据类型原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Spring boot详解fastjson过滤字段为null值如何解决

    Spring boot详解fastjson过滤字段为null值如何解决

    这篇文章主要介绍了解决Spring boot中fastjson过滤字段为null值的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 一文看懂springboot实现短信服务功能

    一文看懂springboot实现短信服务功能

    项目中的短信服务基本上上都会用到,简单的注册验证码,消息通知等等都会用到。这篇文章主要介绍了springboot 实现短信服务功能,需要的朋友可以参考下
    2019-10-10
  • SpringBoot中自定义注解实现控制器访问次数限制实例

    SpringBoot中自定义注解实现控制器访问次数限制实例

    本篇文章主要介绍了SpringBoot中自定义注解实现控制器访问次数限制实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • Java代码中如何设置输出字符集为UTF-8

    Java代码中如何设置输出字符集为UTF-8

    这篇文章主要介绍了Java代码中设置输出字符集为UTF-8,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • 在SpringBoot项目中解决依赖冲突问题的方法

    在SpringBoot项目中解决依赖冲突问题的方法

    在SpringBoot项目中,依赖冲突是一个常见的问题,特别是当项目引入多个第三方库或框架时,依赖冲突可能导致编译错误、运行时异常或不可预测的行为,本文给大家介绍了如何在SpringBoot项目中解决以来冲突问题的方法,需要的朋友可以参考下
    2024-01-01
  • 给Java文件打成独立JAR包的详细步骤记录

    给Java文件打成独立JAR包的详细步骤记录

    这篇文章主要介绍了给Java文件打成独立JAR包的相关资料,文中将Java文件打包成独立的JAR包,包括非Maven和Maven项目的打包步骤,需要的朋友可以参考下
    2024-12-12

最新评论