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

 直接看问题直接看问题

解决思路

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

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

解决方案

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

代码

/**
     * 预览PDF文件
     *
     * @param filePath
     * @param originFileName
     * @return void
     * @author ss.xin
     * @date 2021/2/5 9:27
     */
    @GetMapping("/filePdf")
    public 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);
        }
    }

 

解决

posted @ 2024-08-21 15:30  林财钦  阅读(55)  评论(0编辑  收藏  举报