首页 > 编程语言 >Java预览PDF时的文件名称问题

Java预览PDF时的文件名称问题

时间:2024-08-21 15:26:32浏览次数:8  
标签:文件 Java originFileName new 文件名称 PDF showName

 直接看问题直接看问题

解决思路

看了一下一个有问题的PDF文件之后发现文件的名称和文件的属性名其实不一致,浏览器默认展示的是文件的属性名,而不是我们看到的文件名称

这也就让我定位到了问题的所在,出现这个bug的原因就是PDF文件的属性名称与文件名称不一致
定位到问题之后就很好解决了

解决方案

从pdfbox的官网我们可以看到有一个静态方法专门用于将输入流解析为PDF文档,我们就是用这个方法来进行操作

代码

/**
     * 预览PDF文件
     *
     * @param filePath
     * @param originFileName
     * @return void
     * @author ss.xin
     * @date 2021/2/5 9:27
     */
    @GetMapping("/filePdf")
    private void viewPdfFile(HttpServletResponse response, String uuid) {
        if (StringUtils.isBlank(uuid)) {
            throw new RuntimeException("请指定文件ID");
        }
        UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
        wrapperFile.eq("uuid", uuid);
        WikiPageFile pageFile = wikiPageFileService.getOne(wrapperFile);
        if (pageFile == null) {
            throw new RuntimeException("未找到指定文件");
        }
        File file = new File(pageFile.getFileUrl());
        try (OutputStream outputStream = response.getOutputStream();
             //加载pdf附件到PDF流中
             PDDocument document = PDDocument.load(new FileInputStream(file))) {
            String originFileName = Optional.ofNullable(pageFile.getFileName()).orElse("");

            response.setCharacterEncoding("UTF8");
            String showName = StringUtils.isNotBlank(originFileName) ? originFileName : file.getName();
            showName = URLEncoder.encode(showName, "UTF8");
            response.setHeader("Content-Disposition", "inline;fileName=" + showName + ";fileName*=UTF-8''" + showName);
            //从PDF流中获得PDF文档属性对象
            PDDocumentInformation info = document.getDocumentInformation();
            //设置PDF文档属性对象的文件名称(最重要的环节)
            info.setTitle(StringUtils.isNotBlank(originFileName) ? originFileName : file.getName());
            document.setDocumentInformation(info);
            //修改完直接输出到响应体中
            document.save(outputStream);
        } catch (Exception e) {
            log.error(this.getClass().getName() + ".viewPdfFile:", e);
        }
    }

 

解决

标签:文件,Java,originFileName,new,文件名称,PDF,showName
From: https://www.cnblogs.com/lcaiqin/p/18371758

相关文章

  • Java面试八股文 非常详细了!!!
    准备篇Java程序员的面试过程——总分结构凡事预则立,不预则废应届生该如何找到合适的练手项目Redis篇面试考点——一、缓存面试官:什么是缓存穿透 ?怎么解决?候选人:(穿透无中生有Key,布隆过滤NULL隔离)嗯~~,我想一下缓存穿透是指查询一个一定不存在的数据,如果从存储......
  • java计算机毕业设计中小型制造型企业erp管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和市场竞争的日益激烈,中小型制造型企业面临着前所未有的挑战与机遇。传统的手工管理模式已难以满足企业对于效率、成本控制及......
  • java计算机毕业设计学院综合管理系统设计与开发—科研数据管理子系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的快速发展与科研活动的日益频繁,学院作为科研活动的重要载体,其科研数据的管理变得愈发复杂与重要。传统的手工记录与分散存储方式已难以......
  • java计算机毕业设计校园洗衣房管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育规模的不断扩大,校园生活的便捷性成为学生们日益关注的话题。在校园日常生活中,洗衣作为一项基本且频繁的需求,传统的手工洗衣方式已难以满......
  • Java计算机毕业设计的在线课堂考试系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,教育领域正经历着前所未有的变革。传统的教学模式受限于时间、空间及资源分配,难以满足个性化学习和高效评估的需求。特别是在......
  • java8
    我学习了如何实现一个学生管理系统利用java让我学习到了如何去解决一个问题,如何做系统构架以及如何设计类其中还学到了以下知识1.项目一个Java项目是一个包含所有相关代码、资源和配置的整体。它通常由一个或多个模块组成。项目包括源代码、库、配置文件、构建文件等。它是......
  • java线程池任务执行过程 | java线程池原理探究 | 线程池源码
    目录一、线程池的使用二、线程池的创建2.1构造方法及参数2.2拒绝策略2.2.1AbortPolicy(直接抛出异常)2.2.2 CallerRunsPolicy(将任务交给调用者处理)2.2.3 DiscardOldestPolicy(弹出队列中等待最久的任务)2.2.4 DiscardPolicy(无操作)2.2.5自定义拒绝策略(实现Rejected......
  • Java毕业设计作品(87):基于thymeleaf前后端分离 校园学习资料共享平台系统设计与实现
      博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书......
  • python实现自动化生成pdf报告
    easypdf使用手册1.项目介绍1.1关于1.2easypdf有什么优势1.2easypdf可以用来做什么1.3项目框架1.4项目教程视频2.安装项目环境2.1安装Python32.2在Windows上安装Python32.3在Mac上安装Python32.4在Linux上安装Python32.5在Windows上安装Pycharm2.6在Mac上......
  • Java中的司机抢单实现:并发问题与解决方案
    文章目录司机抢单的基础实现乐观锁解决并发问题总结在共享经济的浪潮中,像滴滴打车这样的服务已经成为我们生活中不可或缺的一部分。对于司机和平台来说,抢单是一个关键环节,如何在保证系统高效运行的同时,确保抢单过程的公平与准确,是一个值得深入探讨的问题。在这篇博......