亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java預(yù)覽PDF時(shí)的文件名稱問題及解決

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

Java預(yù)覽PDF時(shí)的文件名稱

問題場(chǎng)景

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

在這里插入圖片描述

剛開始看到這個(gè)問題的時(shí)候確實(shí)很頭疼,因?yàn)橹皣L試過去解決這個(gè)問題,但是當(dāng)時(shí)因?yàn)橐恍┢渌脑?,沒有仔細(xì)的去思考這些個(gè)問題,這會(huì)做新項(xiàng)目剛好有時(shí)間去琢磨一下這個(gè)問題,

解決思路

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

在這里插入圖片描述

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

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

解決方案

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

在這里插入圖片描述

接下來看代碼

/**
     * 預(yù)覽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文檔屬性對(duì)象
            PDDocumentInformation info = document.getDocumentInformation();
            //設(shè)置PDF文檔屬性對(duì)象的文件名稱(最重要的環(huán)節(jié))
            info.setTitle(StringUtils.isNotBlank(originFileName) ? originFileName : file.getName());
            document.setDocumentInformation(info);
            //修改完直接輸出到響應(yīng)體中
            document.save(outputStream);
        } catch (Exception e) {
            log.error(this.getClass().getName() + ".viewPdfFile:", e);
        }
    }

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

在這里插入圖片描述

至此,就達(dá)到了我們整個(gè)想要的一個(gè)效果。

預(yù)覽pdf時(shí)中文亂碼

項(xiàng)目在預(yù)覽pdf時(shí),中文亂碼。

處理方式:

第一步

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

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

第二步

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

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

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

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

相關(guān)文章

  • Java線程阻塞工具LockSupport用法詳解

    Java線程阻塞工具LockSupport用法詳解

    Java中的LockSupport是一個(gè)用于線程同步的工具類,它提供了一種基于線程的阻塞和喚醒機(jī)制,LockSupport可以讓線程在特定條件下阻塞掛起,等待其他線程發(fā)送信號(hào)來喚醒它,本文將通過一個(gè)小案例給大家介紹一下LockSupport怎么用,讓你永遠(yuǎn)記住它
    2023-08-08
  • 通過dom4j解析xml字符串(示例代碼)

    通過dom4j解析xml字符串(示例代碼)

    本篇文章主要是對(duì)通過dom4j解析xml字符串的示例代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-12-12
  • 理解Java注解及Spring的@Autowired是如何實(shí)現(xiàn)的

    理解Java注解及Spring的@Autowired是如何實(shí)現(xiàn)的

    今天通過本文帶領(lǐng)大家學(xué)習(xí)注解的基礎(chǔ)知識(shí),學(xué)習(xí)Spring的@Autowired是怎么實(shí)現(xiàn)的,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-07-07
  • java操作mongodb時(shí),對(duì)象bean和DBObject相互轉(zhuǎn)換的方法(推薦)

    java操作mongodb時(shí),對(duì)象bean和DBObject相互轉(zhuǎn)換的方法(推薦)

    下面小編就為大家?guī)硪黄猨ava操作mongodb時(shí),對(duì)象bean和DBObject相互轉(zhuǎn)換的方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • @RequestParam注解加與不加有什么區(qū)別

    @RequestParam注解加與不加有什么區(qū)別

    這篇文章主要介紹了@RequestParam注解加與不加有什么區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java多線程詳細(xì)總結(jié)

    java多線程詳細(xì)總結(jié)

    以下小編就對(duì)java中的多線程進(jìn)行了詳細(xì)的總結(jié)分析,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-10-10
  • Java double類型比較大小詳解

    Java double類型比較大小詳解

    這篇文章主要介紹了Java double類型比較大小,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • JAVA線程用法詳解

    JAVA線程用法詳解

    這篇文章主要介紹了JAVA線程用法,配合實(shí)例針對(duì)Java中線程的開啟、sleep、合并與讓出等進(jìn)行了較為深入的分析,需要的朋友可以參考下
    2014-08-08
  • Seata集成Mybatis-Plus解決多數(shù)據(jù)源事務(wù)問題

    Seata集成Mybatis-Plus解決多數(shù)據(jù)源事務(wù)問題

    當(dāng)進(jìn)行業(yè)務(wù)操作時(shí),訂單發(fā)生異常 ,進(jìn)行了回滾操作,因?yàn)樵诓煌臄?shù)據(jù)庫(kù)實(shí)例中,余額卻扣除成功,此時(shí)發(fā)現(xiàn)數(shù)據(jù)不一致問題,本文給大家介紹Seata集成Mybatis-Plus解決多數(shù)據(jù)源事務(wù)問題,感興趣的朋友一起看看吧
    2023-11-11
  • Java異常分類及統(tǒng)一處理詳解

    Java異常分類及統(tǒng)一處理詳解

    這篇文章主要為大家詳細(xì)介紹了Java異常分類及統(tǒng)一處理,SpringMVC處理異常支持ajax,web.xml配置異常,感興趣的小伙伴們可以參考一下
    2016-03-03

最新評(píng)論