最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java預覽PDF時的文件名稱問題及解決

 更新時間:2022年01月07日 09:15:36   作者:shyの程序猿  
這篇文章主要介紹了Java預覽PDF時的文件名稱問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Java預覽PDF時的文件名稱

問題場景

今天在做新項目的時候,測試提交過來一個bug:在谷歌瀏覽器上預覽一些客戶上傳的pdf文件時,發(fā)現(xiàn)瀏覽器的標簽上展示的要么不是我們看到的文件名,要么就直接是方法名,看起來不太合適,讓我想想辦法優(yōu)化優(yōu)化。 

在這里插入圖片描述

剛開始看到這個問題的時候確實很頭疼,因為之前嘗試過去解決這個問題,但是當時因為一些其他的原因,沒有仔細的去思考這些個問題,這會做新項目剛好有時間去琢磨一下這個問題,

解決思路

看了一下一個有問題的PDF文件之后發(fā)現(xiàn)文件的名稱和文件的屬性名其實不一致,瀏覽器默認展示的是文件的屬性名,而不是我們看到的文件名稱

在這里插入圖片描述

這也就讓我定位到了問題的所在,出現(xiàn)這個bug的原因就是PDF文件的屬性名稱與文件名稱不一致,

定位到問題之后就很好解決了

解決方案

從pdfbox的 官網(wǎng)文檔 我們可以看到有一個靜態(tài)方法專門用于將輸入流解析為PDF文檔,我們就是用這個方法來進行操作

在這里插入圖片描述

接下來看代碼

/**
     * 預覽PDF文件
     *
     * @param filePath
     * @param originFileName
     * @return void
     * @author ss.xin
     * @date 2021/2/5 9:27
     */
    private void viewPdfFile(String filePath, String originFileName) {
        File file = new File(filePath);
        try (OutputStream outputStream = response.getOutputStream();
             //加載pdf附件到PDF流中
             PDDocument document = PDDocument.load(new FileInputStream(file))) {
            response.setCharacterEncoding(Constant.UTF8);
            String showName = StringUtils.isNotBlank(originFileName) ? originFileName : file.getName();
            showName = URLEncoder.encode(showName, Constant.UTF8);
            response.setHeader("Content-Disposition", "inline;fileName=" + showName + ";fileName*=UTF-8''" + showName);
            //從PDF流中獲得PDF文檔屬性對象
            PDDocumentInformation info = document.getDocumentInformation();
            //設(shè)置PDF文檔屬性對象的文件名稱(最重要的環(huán)節(jié))
            info.setTitle(StringUtils.isNotBlank(originFileName) ? originFileName : file.getName());
            document.setDocumentInformation(info);
            //修改完直接輸出到響應體中
            document.save(outputStream);
        } catch (Exception e) {
            log.error(this.getClass().getName() + ".viewPdfFile:", e);
        }
    }

設(shè)置完成之后,我們就可以看到在瀏覽器的頁簽上文件的名稱已經(jīng)正常了

在這里插入圖片描述

至此,就達到了我們整個想要的一個效果。

預覽pdf時中文亂碼

項目在預覽pdf時,中文亂碼。

處理方式:

第一步

首先檢查是否設(shè)置了 request.setCharacterEncoding(“UTF-8”);

response.setContentType(“application/pdf; charset=UTF-8”);

第二步

如果部署在win上沒有亂碼,部署在linux上有亂碼,可能是在linux上面可能沒有對應的字體,拷貝字體上去(我這個版本的字體不用安裝),指定路徑即可 FontSettings.setFontsFolder("/usr/share/fonts/", true);

如果有使用liberoffice,使用下面的方式:

liberoffice默認讀取的時這個路徑下的字體/usr/share/fonts,把字體拷貝導這個路徑下面,chmod 777 * 進行授權(quán),然后sudo fc-cache -fv刷新緩存,重啟系統(tǒng)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA創(chuàng)建MyBatis配置文件模板的方法步驟

    IDEA創(chuàng)建MyBatis配置文件模板的方法步驟

    這篇文章主要介紹了IDEA創(chuàng)建MyBatis配置文件模板的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Java實現(xiàn)上傳文件到服務(wù)器的示例代碼

    Java實現(xiàn)上傳文件到服務(wù)器的示例代碼

    這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)上傳文件到服務(wù)器,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-04-04
  • 實例講解spring boot 多線程

    實例講解spring boot 多線程

    這篇文章主要介紹了spring boot 多線程的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • Spring Boot中@Conditional注解介紹

    Spring Boot中@Conditional注解介紹

    @Conditional表示僅當所有指定條件都匹配時,組件才有資格注冊。該@Conditional注釋可以在以下任一方式使用:作為任何@Bean方法的方法級注釋、作為任何類的直接或間接注釋的類型級別注釋@Component,包括@Configuration類、作為元注釋,目的是組成自定義構(gòu)造型注釋
    2022-09-09
  • Java中定時任務(wù)的全方位場景實現(xiàn)思路分析

    Java中定時任務(wù)的全方位場景實現(xiàn)思路分析

    在開發(fā)過程中,根據(jù)需求和業(yè)務(wù)的不同經(jīng)常會有很多場景需要用到不同特性的定時任務(wù),本文將針對這些場景,提供不同的一個實現(xiàn)思路,感興趣的小伙伴快跟隨小編一起學習一下吧
    2023-12-12
  • Spring Bean實例化實現(xiàn)過程解析

    Spring Bean實例化實現(xiàn)過程解析

    這篇文章主要介紹了Spring Bean實例化實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Idea進行pull的時候Your local changes would be overwritten by merge.

    Idea進行pull的時候Your local changes would be

    這篇文章主要介紹了Idea進行pull的時候Your local changes would be overwritten by merge.具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringCloud之注冊中心之Nacos負載均衡詳解

    SpringCloud之注冊中心之Nacos負載均衡詳解

    Nacos提供多種負載均衡策略,包括權(quán)重、同機房、同地域、同環(huán)境等,服務(wù)下線和權(quán)重配置可以通過Nacos管理界面進行,同時,Nacos使用Raft算法選舉Leader節(jié)點,若IP地址改變可能會影響Leader選舉,配置同集群優(yōu)先訪問可以提高訪問速度,通過配置集群名稱和負載均衡策略
    2025-03-03
  • xxl-job對比ElasticJob使用示例詳解

    xxl-job對比ElasticJob使用示例詳解

    這篇文章主要為大家介紹了xxl-job對比ElasticJob使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • java收集器Collector案例匯總

    java收集器Collector案例匯總

    這篇文章主要介紹了java收集器Collector案例匯總,Collectors作為Stream的collect方法的參數(shù),Collector是一個接口,它是一個可變的匯聚操作,更多相關(guān)介紹,需要的朋友可以參考下
    2022-06-06

最新評論

灯塔市| 宜兴市| 桃江县| 眉山市| 西盟| 枞阳县| 磐安县| 潜山县| 乌兰浩特市| 清河县| 二连浩特市| 太湖县| 高碑店市| 石景山区| 达尔| 兴业县| 武胜县| 阳谷县| 容城县| 新野县| 拜城县| 修水县| 财经| 济宁市| 耿马| 潮安县| 磐安县| 亚东县| 青浦区| 万州区| 洛浦县| 准格尔旗| 天等县| 定南县| 腾冲县| 黔南| 闽侯县| 屯昌县| 册亨县| 汽车| 东丰县|