????????在使用pdf.js獲取PDF文本時(shí),發(fā)現(xiàn)有部分文件獲取不到文本(另:vue-pdf依賴于pdf.js,所以也會(huì)出現(xiàn)這個(gè)問題)。
????????此時(shí),控制臺(tái)其實(shí)給出了警告提示信息,只不過是用console.log打印的,容易被忽視。
????????Warning: Error during font loading: CMap baseUrl must bespecified, see "PDFJS.cMapUrl" (and also"PDFJS.cMapPacked").
????????警告:字體加載過程中發(fā)生錯(cuò)誤:必須指定CMap的“baseUrl”參數(shù),請(qǐng)確保提供了“cMapUrl”和“cMapPacked”API參數(shù)。
????????原因:PDF文檔中包含有pdf.js不支持的字體格式。
????????解決方法:網(wǎng)上粗略搜了下,可能不同版本配置cMapUrl的方式不同,不容易找到適合自己的,不過在源碼中稍加搜索還是可以很快找到的。
????????我這里控制臺(tái)輸出PDFJS.version得到的版本號(hào)是1.10.88,解決辦法是:在引入完pdf.js以后,為其cMapUrl賦值即可。
PDFJS.cMapUrl='/lib/CMap/'; // CMap文件路徑
????????設(shè)置完成后,再次刷新頁面,可以發(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)容差異: