精华内容
下载资源
问答
  • JAVA实现文件预览功能

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

    近期做的项目要求实现文件在线预览功能,可支持多种文件类型,TXT,DOC,PDF,XLS ,

    最好支持压缩包的预览功能.没办法,只能网上找啊 

    看了个遍,都是些不靠谱的,转来转去的一个能用的都没有,付费的产品有永中啊,OFFICE 365啊,这些大概一搜都能搜到,价格也不是很贵

    BUT能不用钱解决问题,就尽量自己来搞,毕竟这个项目目前还在试行期,前期投入还不值得,废话不多说,上图上代码.

     

    西天取经的路上  在网上找到一个开源项目   https://gitee.com/kekingcn/file-online-preview.git

    就是这个

     

    因为现在大多数付费产品也是基于OpenOffice的 这个开源项目的存在着实解决了我的问题..感谢代码拥有者.

    这个项目下下来的时间还是挺慢的 需要耐心等待下...(估计是我当时网络问题)

     

     

    下完后 整个项目的结构如图,至于什么SpringBoot的 大家去搜好了 肯定比我讲的好,你们只要会用就行了.

    down下来 改了下配置 主要是 application-dev.properties这个文件需要改动

     

    这个是楼主的配置  桌面上建立一个 demo 的文件夹  哦 差点忘记了 记得下载 Open office 安装就默认路径就行 图标如下图

    网上的下载都比较慢  大家可以用我分享的链接下载 不用谢  安装一直下一步就行

    链接: https://pan.baidu.com/s/1YSbOMFn62uF7lKYr4Yflfw 密码: ehi7

    Redis 也不要忘了哈  怎么安装 这个大家都会

    Redis 服务  和 OpenOffice服务开启后 直接启动项目 

    直接运行这个main 方法 楼主端口是8012  直接浏览器

     

    直接上传文件就可以了  楼主传了个压缩包  来看下效果

    完美预览成功 再试个 word 也是成功  

     

    好了 推荐大家试用下  有什么问题可以来问我 

    展开全文
  • 前端人员拿到这个需求后,去看了一下以前的代码,以前调用的下载接口和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的字符串数据,就可以拿到整个文件的所有数

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

    展开全文
  • 之前工作中,需要实现一个在线预览pdf功能,一开始用的的 jQuery-media 插件来实现的,后来感觉有点慢,就继续寻找更好的替代品,直到遇见了 ICE pdf。。。 ICEpdf (官网:http://www.icesoft.org/java/home.jsf)...

    之前工作中,需要实现一个在线预览pdf的功能,一开始用的的 jQuery-media 插件来实现的,后来感觉有点慢,就继续寻找更好的替代品,直到遇见了 ICE pdf。。。

    ICEpdf (官网:http://www.icesoft.org/java/home.jsf) 原理是基于 Java SE 中的 Swing 实现的 (谁说 Swing 没有用武之地了。。。) ,将一个 PDF 文件作为一个 Document 对象,调用封装的方法,将该文件的每一页生成一张图片!

    关键代码如下:

    public static void main(String[] args) {
            String filePath = "test.pdf";
    
            // open the file
            Document document = new Document();
            try {
                document.setFile(filePath);
            } catch (PDFException e) {
                System.out.println("parsing PDF document failure" + e);
            } catch (PDFSecurityException e) {
                System.out.println("encrytion not supported " + e);
            } catch (IOException e) {
                System.out.println("IOException " + e);
            }
    
            // save page captures to file
            float scale = 2.0f;
            float rotation = 360f;
    
            // Paint each pages content to an image and write the image to file
            System.out.println("The number of page: " + document.getNumberOfPages());
            for (int i = 0; i < 5; i++) {
                BufferedImage image = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.PRINT, Page.BOUNDARY_TRIMBOX, rotation, scale);
                try {
                    System.out.println("capturing page: " + i);
                    File file = new File("imageCapture_" + i + ".png");
                    ImageIO.write(image, "png", file);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                image.flush();
            }
            // clean up resources
            document.dispose();
    
    
        }

    我的 jar 包用的是 icepdf-core-6.0.0.jar ,

    首先,声明一个 Document 对象,调用 setFile(String filePath) 方法,参数为 pdf 绝对或者相当路径;

    变量 scale 代表放缩比例,默认为 1,越大生成的图片越清晰;

    变量 rotation 为旋转角度,360度一个周期,可以设置任意值试试;

    然后调用 getPageImage() 方法,生成图片流,然后对图片进行处理,可以输出到本地,也可以以流的形式传到页面,实现快速预览的效果。

    最后,我利用这个功能,在首次预览时,生成对应页码图片到本地或者服务器,第二次预览则直接查看图片,使得用户体验更好~

    转载于:https://www.cnblogs.com/JavaSubin/p/5399546.html

    展开全文
  • 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.效果

    在这里插入图片描述

    展开全文
  • 最近项目中需要实现文件pdf)的预览功能。所以网上搜了一下教程,期间也遇到一些问题,所以结合自己的些许经验,打算写下了做个记录。 一、解决思路 swftools将pdf转换成swf,然后利用FlexPaper插件实现在线...
  • java实现office文件预览

    2018-06-12 17:31:00
    不知觉就过了这个久了,继上篇java实现文件上传下载后,今天给大家分享一篇java实现的对office文件预览功能。 相信大家在平常的项目中会遇到需要对文件实现预览功能,这里不用下载节省很多事。大家请擦亮眼睛下面...
  • java集成pdf.js实现pdf文件在线预览

    万次阅读 2016-12-27 15:22:25
    最近项目需要实现在线预览pdf文件功能,找来找去,发现有个pdf.js的类库挺好用,直接用js实现在线预览。 pdf.js是开源项目,github的地址: https://github.com/mozilla/pdf.js 根据教程指引,有以下几个步骤: ...
  • 最近项目需要用到文件的预览功能,就开始在网上收集资料,学习了几种文件预览的方法。我集成到我项目内测试的有以下三种,最后使用的是第三种:直接使用别人提供的服务 例如:office web 365使用openoffice+swfTools...
  • 不知觉就过了这个久了,继上篇java实现文件上传下载后,今天给大家分享一篇java实现的对office文件预览功能。相信大家在平常的项目中会遇到需要对文件实现预览功能,这里不用下载节省很多事。大家请擦亮眼睛下面直接...
  • JAVA+POI实现PPT的在线预览接前几篇文章,实现PPT的在线预览,过程如下:1)将PPT转为一个图片集合保存在一个文件夹中2)将图片集合转化为PDF,从而实现PPT的预览实现这一功能的过程中,参阅了很多博客和资料,才...
  • 这里主要是实现对office文件的预览,预览一般是不需要编辑的,所以预览时pdf文件最为方便,我们的思路就是将用户上传的各种office文件转为PDF文件保存下来,用户预览时直接读取PDF,使用浏览器自带的PDF预览功能便可...
  • 标签:最近项目需要用到文件的预览功能,就开始在网上收集资料,学习了几种文件预览的方法。我集成到我项目内测试的有以下三种,最后使用的是第三种:直接使用别人提供的服务 例如:office web 365使用openoffice+...
  • nbspJava如何利用Java实现QQ文件传输功能.pdf2页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。 下载提示1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予...
  • 最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完。压力略大。后面查找百度资料、以及在同事与网友的帮助下,四天多把它做完。查找资料...
  • ①Txt/Word/Excel/PPT=>PDF...缺点:只能处理小文件(1M左右),大的文件无法将pdf转化为swf ②用户上传之后,由单独的程序使用FlashPaper解析用户上传的文件,解析完毕之后用户可以查看, 优点:可以解析比
  • 因项目要求需要用java实现pdf文件的上传、下载、在线预览功能,遂开发了一个小型的项目,闲话少说,先上图 需要的同学文末留言给邮箱,我发你代码。 ...
  • Java实现文件预览

    千次阅读 2017-08-31 10:12:51
    最近项目需要用到文件的预览功能,就开始在网上收集资料,学习了几种文件预览的方法。我集成到我项目内测试的有以下三种,最后使用的是第三种: 直接使用别人提供的服务 例如:office web 365使用openoffice+...
  • Java实现在线预览功能

    2019-04-23 10:32:00
    java实现在线预览功能,需要用到 jacob.dll jacob.jar 预览pdf所需js pdfobject.min.js 将上传文件转为pdf保存。  <div class="control-group"> <label class="control-label">文件:</...
  • Java实现office文档与pdf文档的在线预览功能  最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完。压力略大。后面查找百度资料、以及...
  • 项目中有个文件预览功能,百度了一下实现的方式,有三种:  1. 第三方插件,例如:office web 365  2. 使用oppenoffice + swfTools + flexPaper实现  3. 使用oppenoffice + pdf.js实现 各其中的特点:  1. ...
  • offoce转pdf文件预览,基于aspose-cad,aspose-cells,aspose-words,aspose-slides实现word,xls,ppt,dwg转pdf文件预览 之前基于openoffice做过文件转换预览,由于openoffice需要在容器安装服务而且不稳定, 容易因为...
  • java实现办公文件在线预览功能是一个大家在工作中也许会遇到的需求,网上些公司专门提供这样的服务,不过需要收费 如果想要免费的,可以用openoffice,实现原理就是: 1.通过第三方工具openoffice,将word、excel、...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 124
精华内容 49
关键字:

java实现pdf文件预览功能

java 订阅