精华内容
下载资源
问答
  • 前端人员拿到这个需求后,去看了一下以前的代码,以前调用的下载接口和PDF文件预览接口都是直接将文件成二进制流的形式,然后响应到前端。有的接口即使是动态生成PDF文件或者是Excel文件都是同样的操作,也是将动态...

    新需求

    最近接到一个新的需求,说是之前直接下载的PDF文件或者是Excel文件,现在不能直接下载,需要实现在线预览功能。

    前端人员拿到这个需求后,去看了一下以前的代码,以前调用的下载接口和PDF文件预览接口都是直接将文件成二进制

    流的形式,然后响应到前端。有的接口即使是动态生成PDF文件或者是Excel文件都是同样的操作,也是将动态生成的对

    象的二进制流写入到响应对象中。前端人员遇到的问题是,如果直接将二进制流返回给前端,前端调用的时候,会直接

    载而不能做其他处理。然后找我协商,看看后端人员有没有好的解决办法,我去百度里面查找,找到一个靠谱的方法,

    大致意思就是将文件转为Base64格式的字符串数据,然后返回给前端,前端在去做响应的处理。

    解决方案

    确定方案后,然后我继续去百度里面查找如何将文件转为Base64格式的数据,找到一个可行的方法,网址如下:

    https://blog.csdn.net/dbeautifullife/article/details/77650713

    使用里面的方法写成了一个工具类,然后在根据业务的需要,添加了动态生成PDF文件和动态生成Excel

    文件的方法,很好的解决了文件转换为Base64的方式。

    import lombok.extern.slf4j.Slf4j;

    import org.apache.poi.ss.usermodel.Workbook;

    import org.springframework.context.annotation.Scope;

    import sun.misc.BASE64Encoder;

    import java.io.*;

    /**

    * @Description: 文件转 base64 工具类

    * @ClassName: ToBase64Utils

    * @author: dengchao

    * @date: 2020/11/24 9:27

    */

    @Slf4j

    @Scope(value = "singleton")//单例

    public class ToBase64Utils {

    //私有化构造方法

    private ToBase64Utils(){}

    /* @Description: ava 自带的转换base64对象

    * @author: dengchao

    * @date: 2020-10-24 10:10

    */

    private final static BASE64Encoder encoder = new BASE64Encoder();

    /* @Description: 读取实体文件转 Base64

    * @author: dengchao

    * @date: 2020/11/24 9:29

    * @param: file 文件对象

    * @return: String 字符串

    */

    public static String PDFToBase64(File file) {

    if(file == null || !file.exists()){

    throw new BaseException(MessageConstant.A000001, "传入的file对象为null或者文件不存在");

    }

    if(file.isDirectory()){

    throw new BaseException(MessageConstant.A000001, "传入的file对象是一个路径,不是具体的文件");

    }

    ToBase64Utils.log.error("PDFToBase64-开始读取文件!");

    try ( FileInputStream fin = new FileInputStream(file);

    BufferedInputStream bin = new BufferedInputStream(fin);

    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    BufferedOutputStream bout = new BufferedOutputStream(baos);

    ){

    byte[] buffer = new byte[1024];

    int len = bin.read(buffer);

    while(len != -1){

    bout.write(buffer, 0, len);

    len = bin.read(buffer);

    }

    //刷新此输出流并强制写出所有缓冲的输出字节

    bout.flush();

    return ToBase64Utils.byteArrayToBase64(baos);

    } catch (FileNotFoundException e) {

    ToBase64Utils.log.error("PDFToBase64-文件未找到!");

    e.printStackTrace();

    } catch (IOException e) {

    ToBase64Utils.log.error("PDFToBase64-读取文件异常!");

    e.printStackTrace();

    }

    return "";

    }

    /* @Description: 动态生成 Excel对象 转 Base64

    * @author: dengchao

    * @date: 2020/11/24 9:37

    * @param: No such property: code for class: Script1

    * @return:

    */

    public static String workToBase64(Workbook workbook){

    if(workbook == null){

    throw new BaseException(MessageConstant.A000001, "传入Excel文件对象错误");

    }

    String excelBase64 = "";

    try(ByteArrayOutputStream bos = new ByteArrayOutputStream()){

    workbook.write(bos);

    bos.flush();

    excelBase64 = ToBase64Utils.byteArrayToBase64(bos);

    }catch(Exception e){

    excelBase64 = "";

    ToBase64Utils.log.error("EXCEL文件转Base64错误!", e);

    }

    return excelBase64;

    }

    /* @Description: 字节输出流转 Base64

    * @author: dengchao

    * @date: 2020/11/24 9:48

    * @param: No such property: code for class: Script1

    * @return:

    */

    public static String byteArrayToBase64(ByteArrayOutputStream bos){

    if(bos == null){

    throw new BaseException(MessageConstant.A000001, "传入的字节输入流对象错误");

    }else{

    byte[] byteArray = bos.toByteArray();

    String resultString = ToBase64Utils.encoder.encodeBuffer(byteArray).trim();

    return resultString;

    }

    }

    }

    核心原理就是将二进制的输出流转换为Base64字符串即可。

    实际操作

    工具类写好之后,立马和前端人员进行调试,测试通过,能够正常返回Base64的字符串,并且前端人员拿到数据后,可以进一步做其他操作。

    前端人员的代码能看懂一大半,使用的VUE组件。大致意思就是引用VUE组件生成一个excel文件对象,然后在动态的拼接数据,最后显示

    在页面中。

    const workbook = await XLSX.read(res.responseBody, { type: 'base64', cellDates: true })

    workbook.SheetNames.map(async item => {

    if (item) {

    const title = item

    let html = await XLSX.utils.sheet_to_html(workbook.Sheets[item]).match(/

    const totalTr = html.match(//g).length

    const totalEmptyTd = html.match(/

    /g).length

    // 如果每行结尾都是空 td,则过滤掉

    if (totalTr === totalEmptyTd) {

    html = html.replace(/

    /g, '')

    }

    this.xlsxHtml.push({title, html})

    }

    })

    最终完成这个功能,PDF也是同样的处理方式。对于一般人来说,这完全能够满足需求,实现在线预览的功能,而且效果也很好。

    可是对于专业人士来说,这种操作方式还是存在问题的,只要拿到文件的Base64的字符串数据,就可以拿到整个文件的所有数

    据。所以对于安全要求比较严格的业务来说,这个是不达标的。不过对于我们来说,已经满足要求了。

    展开全文
  • java实现pdf预览

    2018-05-27 08:32:04
    java实现pdf预览 java实现pdf预览 java实现pdf预览 java实现pdf预览
  • 用简单的java代码实现pdf的上传、下载、在线预览等基本操作. 可以在此代码上扩展或者直接拿来就可以使用.
  • java实现pdf上传,下载,在线预览,删除,修改等功能,属于是模版,可以借鉴,不是完全适应所有的
  • 需要安装安装openofice和SWFTools 软件,实测可用。 用以下命令启动OpenOffice服务 CMD命令进入OpenOffice\program soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard ...
  • Java实现web在线预览office文档与pdf文档实例,代码实现,为此提供代码共享。
  • java实现浏览器在线预览offic(doc、xls、ppt)和pdf文件,本人将例子集成到项目中,已成功。 技术原理:将文件先转换成pdf文件,再将pdf文件转换成swf文件,最后显示在浏览器上。 资源描述:本资源包括swftools...
  • PDF在线预览java

    2017-09-27 14:23:07
    使用java实现了多种pdf文件在线预览功能,在不同的浏览器下会出现不能支持的错误,所以做了几个在不同的浏览器下预览
  • java 实现pdf文件预览

    万次阅读 2018-01-29 10:17:28
    点击连接,实现现在预览pdf文件 点击查看pdf function finPdf(){ window.open("/devDoc?storeName=文件名.pdf", "_blank","top=200,left=200,height=600,width=800,status=yes,toolbar=1,menubar=no,...

    点击连接,实现现在预览pdf文件

    <a href="javascript:void(0);" οnclick="finPdf()">点击查看pdf</a>


    function finPdf(){

    window.open("/devDoc?storeName=文件名.pdf", "_blank","top=200,left=200,height=600,width=800,status=yes,toolbar=1,menubar=no,location=no,scrollbars=yes");


    以上写在页面

     //storeName是文件名

     @RequestMapping("/devDoc")
    @ResponseBody
    public void devDoc(HttpServletRequest request, HttpServletResponse response, String storeName) throws Exception {
    request.setCharacterEncoding("UTF-8");
    String ctxPath = request.getSession().getServletContext().getRealPath("");
    String downLoadPath = ctxPath + "/file/" + storeName;
    response.setContentType("application/pdf");
    FileInputStream in = new FileInputStream(new File(downLoadPath));
    OutputStream out = response.getOutputStream();
    byte[] b = new byte[512];
    while ((in.read(b))!=-1) {
    out.write(b);
    }
    out.flush();
    in.close();
    out.close();
    }

    展开全文
  • Java实现PDF在线预览(四种方法)

    千次阅读 2021-03-05 15:29:47
    @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 {...

    @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文件在浏览器上预览

    千次阅读 2020-12-20 18:41:59
    pdf文件预览功能 1.页面代码 按钮: <a href="#" class="btn btn-default" id="reviewPrice" title="${text('预览')}"><i class="fa fa-print"></i> ${text('预览')}</a> 点击事件: $("#...

    pdf文件预览功能

    1.页面代码

    按钮:

    <a href="#" class="btn btn-default" id="reviewPrice" title="${text('预览')}"><i class="fa fa-print"></i> ${text('预览')}</a>
    

    点击事件:

    $("#reviewPrice").click(function(){
        var id = $(this).attr("id").substr(13);
        window.open("${ctx}/jss/reviewPriceData?priceId=" + id);
    });
    
    2.Controller文件:
    /**
     * pdf文件预览
     * @param request
     * @param response
     * @return
     * @throws IOException
     */
    @RequestMapping(value = "reviewPriceData")
    public void reviewPriceData(String priceId , HttpServletRequest request, HttpServletResponse response) throws Exception, TemplateException, DocumentException {
       // 获取pdf文件路径(包括文件名)
       String tempPrintPdfFile = "D:/test.pdf";
    
       FileInputStream inStream = new FileInputStream(tempPrintPdfFile);
    
       // 设置输出的格式
       response.setContentType( "application/pdf");
    
       OutputStream outputStream= response.getOutputStream();
       int count = 0;
       byte[] buffer = new byte[1024 * 1024];
       while ((count =inStream.read(buffer)) != -1){
          outputStream.write(buffer, 0,count);
       }
       outputStream.flush();
    }
    
    3.效果

    在这里插入图片描述

    展开全文
  • JAVA实现PDF转HTML

    2020-10-29 16:53:08
    该包包含后端代码,转换控件,测试文件,正式项目应用表现正常,注意不能转换水印、印章这类特殊类型,且行且珍惜。
  • 包括js资源,及简单demo实现:html中的pdf文件预览
  • Java实现文件预览

    2021-02-12 09:40:40
    最近项目需要用到文件的预览功能,就开始在网上收集资料,学习了几种文件预览的方法。我集成到我项目内测试的有以下三种,最后使用的是第三种:直接使用别人提供的服务 例如:office web 365使用openoffice+swfTools...
  • java实现附件预览(openoffice+PDF.js),将office文档,通过openoffice工具转换为PDF文件,使用PDF.js进行前端展示 是对openoffice+swftools+flexpaper的升级版,减少一次swf文件转换,及flexpaper只能预览十页内容...
  • java集成pdf.js实现pdf文件在线预览

    万次阅读 2016-12-27 15:22:25
    最近项目需要实现在线预览pdf文件功能,找来找去,发现有个pdf.js的类库挺好用,直接用js实现在线预览。 pdf.js是开源项目,github的地址: https://github.com/mozilla/pdf.js 根据教程指引,有以下几个步骤: ...
  • Java web使用pdf.js在线预览远程服务器上的pdf文件,包里有pdf.js资源文件以及使用文档
  • JAVA+POI实现PPT的在线预览接前几篇文章,实现PPT的在线预览,过程如下:1)将PPT转为一个图片集合保存在一个文件夹中2)将图片集合转化为PDF,从而实现PPT的预览实现这一功能的过程中,参阅了很多博客和资料,才...
  • 本文主要介绍了java原装代码完成pdf在线预览pdf打印及下载的方法,具有一定的参考价值,下面跟着小编一起来看下吧
  • Java后台返回PDF文件预览下载开始的代码的系统代码为:ResponseEntity onePdf = s3Wrapper.download(contractEntity.getContractUrl());out.write(onePdf.getBody());response.setContentType("application/pdf");...
  • 本文章利用各个浏览器的内核支持PDF预览功能来做,PDF的预览网上说的最多的是PDF.JS实现预览,也找了好多文章,死活最后实现不了,通过这个方法解决了,如果有PDF.js解决的可以大家沟通交流下。 这里提一下,其他...
  • JAVA实现文件预览功能

    万次阅读 多人点赞 2018-06-29 16:23:47
    近期做的项目要求实现文件在线预览功能,可支持多种文件类型,TXT,DOC,PDF,XLS , 最好支持压缩包的预览功能.没办法,只能网上找啊 . 看了个遍,都是些不靠谱的,转来转去的一个能用的都没有,付费的产品 有 什么永中啊,...
  • Java后台实现pdf文件在浏览器中预览

    万次阅读 2019-06-05 17:50:36
    Java后台实现pdf文件在浏览器中预览 放在服务器的pdf文件不能通过完整路径访问,想要实现的效果是浏览器访问后台接口可以预览pdf文件,暂时是把pdf文件放在本地测试 通过输出流的方式将pdf文件输出 1.项目中使用Spring...
  • NULL 博文链接:https://doujun1998.iteye.com/blog/1758708
  • java实现仿百度文库预览文档功能

    热门讨论 2013-01-31 15:17:47
    在他人基础上实现java实现仿百度文库预览文档功能, Txt/Word/Excel/PPT => PDF(OpenOffice+JodConverter) => SWF(pdf2swf)=>FlexPaper浏览。 包含了源代码,文档,部分较小文件的安装文件,部分较大文件的下载...
  • 实现pdf文件预览功能: package com.echarts.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web...
  • java 实现 word 文档的在线预览,资源包含代码和jar包,下载放入项目既可以使用
  • Java实现PDF生成并且打印pdf文件(附demo) 目录: 0. 效果预览 1. 准备环境 2. Java如何调用打印机进行打印 3. Java如何生成pdf打印文件 4. 实现pdf内数据动态填充(可按需求改变数据,有一个模板就行) ...
  • Java实现web在线预览office文档与pdf文档实例 在linux平台下转为pdf 需要安装

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,131
精华内容 4,052
关键字:

java实现pdf文件预览功能

java 订阅