pdf.js 預(yù)覽文件缺失

推薦倆款使用預(yù)判pdf的插件巧鸭,一個(gè)是vue-pdf,一個(gè)是pdf-dist

如果是pdf-dist
需要更改一下node_modules下的pdf.js文件

params.rangeChunkSize = params.rangeChunkSize || 
DEFAULT_RANGE_CHUNK_SIZE;
params.CMapReaderFactory = params.CMapReaderFactory || 
_display_utils.DOMCMapReaderFactory;
params.ignoreErrors = params.stopAtErrors !== true;
params.fontExtraProperties = params.fontExtraProperties === true;
params.pdfBug = params.pdfBug === true;

//解決文字缺少問(wèn)題
params.cMapPacked = true
params.cMapUrl = 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.2.228/cmaps/'

可以搜素一下pdfBug定位一下逢防,新增兩行代碼即可

如果使用vue-pdf,引入node_modules下的

 import CMapReaderFactory from "vue-pdf/src/CMapReaderFactory.js";
  that.url = pdf.createLoadingTask({
          url: e.target.result,
          CMapReaderFactory
        });

但是CMapReaderFactory存在緩存 也就是你發(fā)現(xiàn)打開(kāi)一次后效果就沒(méi)了,文字還是缺失或者亂碼忽匈,

在 vue-pdf/src/CMapReaderFactory.js中疲陕,增加一行代碼即可

        delete require.cache[require.resolve('./buffer-loader!pdfjs-dist/cmaps/'+query.name+'.bcmap')];

完整代碼

    import { CMapCompressionType } from 'pdfjs-dist/es5/build/pdf.js'

    // see https://github.com/mozilla/pdf.js/blob/628e70fbb5dea3b9066aa5c34cca70aaafef8db2/src/display/dom_utils.js#L64

    export default function() {

        this.fetch = function(query) {
            delete require.cache[require.resolve('./buffer-loader!pdfjs-dist/cmaps/'+query.name+'.bcmap')];
            return import('./buffer-loader!pdfjs-dist/cmaps/'+query.name+'.bcmap' /* webpackChunkName: "noprefetch-[request]" */)
            .then(function(bcmap) {

                return {
                    cMapData: bcmap.default,
                    compressionType: CMapCompressionType.BINARY,
                };
            });
        }
    };

如果你是做在移動(dòng)端的頁(yè)面方淤,可引入hammerjs進(jìn)行雙指縮放

npm i hammjs -S

新建一個(gè)export的功能js

    import Hammer from 'hammerjs'//引用hammerjs
    
    //定義縮放方法,接收一個(gè)element參數(shù):使用export暴露該方法
    export function zoomElement(el){
    
        var x = 0;//x軸偏移
        var y = 0;//y軸偏移
        var lastScale = 1;//上次縮放值
        var currentScale = 1;//當(dāng)前縮放值
        var center;//雙指中心點(diǎn)
        
        //初始化hammer
        var hammer = new Hammer(el);
        //縮放事件默認(rèn)是關(guān)閉的蹄殃,需要設(shè)置啟用
        hammer.get('pinch').set({ enable: true });
        
        //監(jiān)聽(tīng)縮放事件
        hammer.on("pinchmove pinchstart pinchin pinchout",e => {
            //縮放開(kāi)始時(shí)獲取上一次縮放值與雙指中心點(diǎn)
            if(e.type == "pinchstart"){
                lastScale = currentScale || 1;
                center = e.center;
            }
            //當(dāng)前縮放值 = 上一次縮放值 * 縮放比例
            currentScale = lastScale * e.scale;
            
            //如果縮放值小于1携茂,重置為1
            if (currentScale < 1){
                currentScale = 1;
            }
            
            //偏移量 = 雙指中心點(diǎn) - 當(dāng)前縮放值 * 雙指中心點(diǎn) = 雙指中心點(diǎn) *(1-當(dāng)前縮放值)
            x = center.x * (1-currentScale)
            y = center.y * (1-currentScale)
            
            //設(shè)置transform
            el.style.transform="translateX("+(x)+"px)"+"translateY("+(y)+"px)"+"scale(" + (currentScale)+ ")"
        });
        //監(jiān)聽(tīng)滑動(dòng)事件
        hammer.on('panright panleft panup pandown',(e)=>{
            //滑動(dòng)時(shí):偏移量 = 滑動(dòng)距離 + 當(dāng)前偏移量
            var translateX = e.deltaX + x
            var translateY = e.deltaY + y
            //如果偏移X值大于0:表示視圖已經(jīng)滑到最左側(cè),重置為0
            if (translateX > 0){
                translateX = 0
            }
            //如果偏移Y值大于0:表示視圖已經(jīng)滑到最頂部诅岩,重置為0
            if (translateY > 0){
                translateY = 0
            }
            //如果偏移X值小于(屏幕寬度-元素寬度):表示視圖已經(jīng)滑到最左側(cè)讳苦,重置為0
            //屏幕寬度 = el.clientWidth
            //元素寬度 = el.getBoundingClientRect().width
            if (translateX < el.clientWidth - el.getBoundingClientRect().width){
                translateX = el.clientWidth - el.getBoundingClientRect().width
            }
            //如果偏移Y值大于(屏幕高度-元素高度):表示視圖已經(jīng)滑到最左側(cè),重置為0
            //屏幕高度 = el.clientHeight
            //元素高度 = el.getBoundingClientRect().height
            if (translateY < el.clientHeight - el.getBoundingClientRect().height){
                translateY = el.clientHeight - el.getBoundingClientRect().height
            }
            //設(shè)置transform
            el.style.transform="translateX("+(translateX)+"px)"+"translateY("+(translateY)+"px)"+"scale(" + (currentScale)+ ")"
        });
        hammer.on('panend',(e)=>{
            //滑動(dòng)結(jié)束:記錄當(dāng)前偏移量 
            x = e.deltaX + x;
            y = e.deltaY + y;
        
        })
    }

使用方法吩谦,引入該暴露的js

import { zoomElement } from "./zoom.js";

 <div style="height: 100%" ref="test" class="test"></div>

.test {
  transform-origin: 0 0;
  touch-action: pan-x pan-y pinch-zoom;
}
mounted(){
let zoomEl = this.$refs.test;
zoomElement(zoomEl);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末医吊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子逮京,更是在濱河造成了極大的恐慌,老刑警劉巖束莫,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懒棉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡览绿,警方通過(guò)查閱死者的電腦和手機(jī)策严,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)饿敲,“玉大人妻导,你說(shuō)我怎么就攤上這事』掣鳎” “怎么了倔韭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瓢对。 經(jīng)常有香客問(wèn)我寿酌,道長(zhǎng),這世上最難降的妖魔是什么硕蛹? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任醇疼,我火速辦了婚禮,結(jié)果婚禮上法焰,老公的妹妹穿的比我還像新娘秧荆。我一直安慰自己,他們只是感情好埃仪,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布乙濒。 她就那樣靜靜地躺著,像睡著了一般贵试。 火紅的嫁衣襯著肌膚如雪琉兜。 梳的紋絲不亂的頭發(fā)上凯正,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音豌蟋,去河邊找鬼廊散。 笑死,一個(gè)胖子當(dāng)著我的面吹牛梧疲,可吹牛的內(nèi)容都是我干的允睹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼幌氮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼缭受!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起该互,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤米者,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后宇智,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蔓搞,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年随橘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喂分。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡机蔗,死狀恐怖蒲祈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萝嘁,我是刑警寧澤梆掸,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站酿愧,受9級(jí)特大地震影響沥潭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嬉挡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一钝鸽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧庞钢,春花似錦拔恰、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春河爹,著一層夾襖步出監(jiān)牢的瞬間匠璧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工咸这, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夷恍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓媳维,卻偏偏與公主長(zhǎng)得像酿雪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侄刽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容