日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

解决html导出pdf中文乱码问题的正确姿势

發布時間:2023/12/13 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 解决html导出pdf中文乱码问题的正确姿势 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

本文使用jspdf 1.5.3版。GitHub地址:https://github.com/MrRio/jsPDF

jspdf是歪果仁開發的,因此在一開始就沒想過支持非英文以外的文字,這就導致了非英文的文本都是亂碼。

因此就有其他大佬給增加了其他解決方案,到了1.5版本也正式加入了非英文支持的解決方案。

解決的思路大致是,給jspdf加載其他字體庫,使其能夠正常輸出中文。

打包字體文件

在開始的第一步我們需要從GitHub下載源代碼,因為我們需要使用其中附帶的工具fontconverter

下載好后我們進入fontconverter文件夾可以看到以下目錄。

直接使用瀏覽器打開fontconverter.html文件,可以看到如下界面

點擊選擇"*.ttf"字體文件,然后點擊生成,會得到一個js文件。這個文件就是把字體文件通過base64編碼轉換成字符串存儲到js文件中。該文件在后續步驟中使用。

生成的js文件結構大概如下:

重點注意

字體文件僅支持ttf格式的文件,并且區分字體的粗細,如果HTML包含多種粗細的文本,必須加載多個字體
fontName 字段必須設置為小寫(存在bug的原因)
善意的提醒:不要使用商用授權字體,除非你有授權,商用授權字體如:微軟雅黑

思源字體下載:https://pan.baidu.com/s/14YAE8X_zZ0wMY19npGrwrg

注意:此下載僅為博主隨意找的一個網盤打包連接,建議大家到官網地址下載。

編寫測試代碼

在全面應用之前需要做一些測試,避免不必要的彎路。測試代碼如下

<script src="https://html2canvas.hertzen.com/dist/html2canvas.js"></script>
	<script src='../../dist/jspdf.debug.js'></script>
    <script src="../../dist/sourcehansanscn-normal-normal.js"></script>
<script>
    var doc = new jsPDF({ orientation: 'p', format: 'a4' });
		doc.setFont('sourcehansanscn-normal', 'normal');
		doc.setFontSize(20);
		doc.html('<div style="font-faimly:sourcehansanscn-normal;">Chinese: 中文</div>', {
			callback: function (newDoc) {
				newDoc.save('chinese-html.pdf')
			}
		});

        doc.text("中文歡迎您", 1, 30);
	    doc.save('chinese-pdf.pdf')
</script>

因為html轉pdf依賴html2canvas.js因此需要先加載此文件,github地址:https://github.com/niklasvh/html2canvas

此處代碼導出了2個pdf文件,設置了中文字體后,一個是直接使用jspdf的API直接繪制pdf,另外一個則是使用html輸出pdf文件。

重點注意:導出HTML需要在導出的HTML中對中文文本直接指定font-faimly,否者HTML導出的pdf仍會中文亂碼

html轉pdf代碼

如果以上測試代碼通過了,就可以編寫正式的導出代碼。

html方法定義:

html(HTMLelement|string,callback)

參數:

第一個參數可以傳遞HTML的節點或HTML的代碼字符串
第二個參數是HTML轉pdf完成后的回調,回調會傳遞pdf實例對象的參數

范例代碼如下:

<script src="https://html2canvas.hertzen.com/dist/html2canvas.js"></script>
	<script src='../../dist/jspdf.debug.js'></script>
    <script src="../../dist/sourcehansanscn-normal-normal.js"></script>
<script>
    var doc = new jsPDF({ orientation: 'p', format: 'a4' });
		doc.setFont('sourcehansanscn-normal', 'normal');
		doc.setFontSize(20);
		doc.html(document.body, {
			callback: function (newDoc) {
				newDoc.save('chinese-html.pdf')
			}
		});
</script>

html到導出pdf的頁面設計注意事項:

首先通過全局設置font-faimly為中文字體
嘗試導出后逐一檢查仍為亂碼元素的font-faimly是否是已加載的中文字體
字體跟粗細有關,如果存在加粗的文本,則需要加載對應加粗的字體。
因為直接通過js打包的字體文件非常的大,因此不宜過多過大,否則可能導致頁面加載慢和js內存不足。

總結

以上是生活随笔為你收集整理的解决html导出pdf中文乱码问题的正确姿势的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。