????????在使用pdf.js獲取PDF文本時(shí),發(fā)現(xiàn)有部分文件獲取不到文本(另:vue-pdf依賴于pdf.js,所以也會(huì)出現(xiàn)這個(gè)問(wèn)題)汇恤。
????????此時(shí),控制臺(tái)其實(shí)給出了警告提示信息拔恰,只不過(guò)是用console.log打印的因谎,容易被忽視。
????????Warning: Error during font loading: CMap baseUrl must bespecified, see "PDFJS.cMapUrl" (and also"PDFJS.cMapPacked").
????????警告:字體加載過(guò)程中發(fā)生錯(cuò)誤:必須指定CMap的“baseUrl”參數(shù)仁连,請(qǐng)確保提供了“cMapUrl”和“cMapPacked”API參數(shù)蓝角。
????????原因:PDF文檔中包含有pdf.js不支持的字體格式阱穗。
????????解決方法:網(wǎng)上粗略搜了下饭冬,可能不同版本配置cMapUrl的方式不同,不容易找到適合自己的揪阶,不過(guò)在源碼中稍加搜索還是可以很快找到的昌抠。
????????我這里控制臺(tái)輸出PDFJS.version得到的版本號(hào)是1.10.88,解決辦法是:在引入完pdf.js以后鲁僚,為其cMapUrl賦值即可炊苫。
PDFJS.cMapUrl='/lib/CMap/'; // CMap文件路徑
????????設(shè)置完成后裁厅,再次刷新頁(yè)面,可以發(fā)現(xiàn)文件已經(jīng)正常顯示了(pdf.js處理PDF文件時(shí)會(huì)自動(dòng)從設(shè)置的CMap文件路徑中獲取所需的字體文件)侨艾。
????????附注1:字體文件的獲取
????????1)官方在github上提供了一些:https://github.com/adobe-type-tools/cmap-resources
????????2)我在網(wǎng)上搜集了一些:https://download.csdn.net/download/xueshen1106/89220133
????????附注2:cMapPacked的配置
????????網(wǎng)上下載的字體文件有很多可能是帶著bcmap后綴的执虹,這意味著它是一個(gè)打包的cmap文件,那么在使用時(shí)可以將 PDFJS.cMapPacked 設(shè)置為 true唠梨。這時(shí)袋励,pdf.js在獲取字體文件時(shí)也會(huì)自動(dòng)增加bcmap后綴。
????????但這里有個(gè)需要注意的地方:如果直接將帶bcmap后綴的文件去掉后綴(同時(shí)不設(shè)置cMapPacked)当叭,這時(shí)字體文件仍然可以正常加載使用茬故;但如果是將未打包的字體文件直接人為添加bcmap后綴(同時(shí)cMapPacked設(shè)置為true),經(jīng)測(cè)試蚁鳖,這樣字體文件不能被正確使用磺芭,是獲取不到PDF文本的。
????????最后醉箕,對(duì)比下同一個(gè)字體打包和不打包的內(nèi)容差異: