解決jspdf中文亂碼、表格中文亂碼!--終極版!!

關於如何***使用jspdf***,已經在這兩篇博文中介紹過了

然而衆所周知,這是歪果仁寫的,並不支持中文!!!

從這裏就走上一段段不歸路,跳進一個個神坑,查閱到的博客都是坑,一大部分是抄來抄去,一大部分就是瞎寫。。。我是怎麼知道的,當然是 都愛過 試過了

代碼和目錄結構

在這裏插入圖片描述
這個font.js裏面放的是一段““簡體蘋方””的字體的base64代碼,這個base64代碼怎麼獲取下面會說,然後用一個隨便自定義變量var moo=''來定義:
在這裏插入圖片描述
js文件夾裏面放的除了faker.min.js是無用的,是爲了生成假數據的,jquery.js也可以忽略,因爲我用的是原生js,當然你要用就用,剩下兩個要用的都是官方文檔能找到的js文件。

然後就是index.html的內容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>解決中文pdf亂碼-----終極版</title>
</head>
<body>
    <button onclick="generate()">導出 pdf</button>
    <!-- pdf展示 -->
    <div style="height: 600px;">
        <iframe id="output" src="" frameborder="0" width="100%" height="90%"></iframe>
    </div>



	<!--以下所引入都是官方都有的文件-->
    <script src="./js/jquery-1.10.2.min.js"></script>
    <!-- ==== 這個js用了官方要不亂碼,要不報錯,我用的是從別的cdn庫下載的 -->
    <script src="./js/jspdf.min.js"></script>
    <!-- ===== -->
    <!-- 這個js是渲染pdf表格的 -->
    <script src="./js/jspdf.plugin.autotable.src.js"></script>
    <!-- 這個js是自己生成的base64字體代碼放的字體文件 -->
    <script src="./font/font.js"></script>


    <script>
        var columns = ["吃飯", "名字", "規範化", "好友推薦"]; // 表頭
        var data = [        // tableDate
            ['第三方', "花花", '菜單', "間距"],
            ['第三方', "花花", '菜單', "間距"],
            ['第三方', "花花", '菜單', "間距"]
        ];
            
        var doc = new jsPDF('p', 'pt'); // 獲取實例

        // ===============================  設置字體
        doc.addFileToVFS('pingfang.ttf', moo)    //  這個地方就是font.js裏面自定義的變量 moo
        doc.addFont('pingfang.ttf', 'custom', 'normal');    //  custom 是自定義的字體名稱,後面的normal不能改,不管你是什麼字體樣式都不能改

        doc.setFont('custom');
        // ===============================



        doc.autoTable(columns, data, {styles: {font: 'custom'}});   // 渲染table,設置table字體也是custom,要不然表格中文還是亂碼
        doc.text(40, 30, '個人號還挺好')      //  渲染title
        document.getElementById("output").src = doc.output('datauristring');   // 渲染pdf

        function generate() {   // 導出pdf
            doc.save("table.pdf");
        }
    </script>
</body>
</html>

然後看頁面效果,看到效果的時候,我都熱淚盈眶:
在這裏插入圖片描述

如何獲取base64字體文件

因爲你要用的是中文字體:首先找到你電腦裏面安裝的中文.ttf的字體文件,在C盤裏面全局搜索.ttf就會出現很多字體,我這裏用““簡體蘋方””示例,注意這個文件拿出來放桌面,名稱改成小寫的:
在這裏插入圖片描述
然後要把這個文件轉爲base64格式的文件,首先在jsPDF的官網github上將整個項目克隆到本地,然後找到如下圖所示的html文件

在這裏插入圖片描述
打開之後,上傳你剛剛存在桌面的pingfang.ttf的文件(注意名字必須小寫):
在這裏插入圖片描述
點擊Creat這個按鈕,就會生成一個js文件,打開這個js文件,你會發現裏面有一段代碼,我們只需要很長很長很長的那一段base64字符串,複製出來放進font.js的自定義變量裏面,就完啦!


敲黑板!!!

就這中文亂碼,簡直了簡直了,感覺是左腳剛出坑,又腳又進去:

包括在你渲染表格和標題的時候,順序都不能亂,要不然就是亂碼

還有引入官方的jspdf.debug.jsjspdf.min.js效果都不一樣,要不亂碼,要不報錯doc.addFileToVFS is not function...

還有這個jspdf.plugin.autotable.src.js,官方的也有壓縮版,和上面那個js搭配竟然也是一會報錯,一會表格沒有樣式,都疊在一起,就這個和上面的bug,整了一天

這三個bug只不過是我遇到的無數個想撞牆的其中三個

你都想象不到bug會出現在哪裏,枯了枯了

如果有小夥伴照我的來,也可能會出現報錯或者亂碼,應該因爲是那個jspdf.min.js的版本問題,我沒用官方的,用了別的cdn庫下載的,我也是試了無數才試出來,有要資源的私信我。


就醬~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章