vue-pdf: Error during font loading: Failed to execute 'postMessage' on 'Worker': ArrayBuffer at index 0 is already detached

 - vue-pdf version 4.0.11
 - vue.js version 2.6.11

import CMapReaderFactory from 'vue-pdf/src/CMapReaderFactory.js' this.vuePdfSrc = pdf.createLoadingTask({url:src,CMapReaderFactory}) after use CMapReaderFactory ,First rendering of PDF file ,Fonts can be realistic. But when I switch the URL of the PDF file, I call again this.vuePdfSrc = pdf.createLoadingTask({url:src,CMapReaderFactory}) Console prompt Warning: Error during font loading: Failed to execute 'postMessage' on 'Worker': ArrayBuffer at index 0 is already detached. and Some fonts cannot be displayed. Is there something wrong with the way I use it? I need to toggle the PDF file on the same page Thank you in advance for your answer

About this issue

Most upvoted comments

temporary fix :

 let src =  pdf.createLoadingTask({
    url: this.pdfUrl,
    cMapUrl: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.5.207/cmaps/',
    cMapPacked: true
  })
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) {
        return import('./buffer-loader!pdfjs-dist/cmaps/' + query.name + '.bcmap' /* webpackChunkName: "noprefetch-[request]" */)
		.then(function(bcmap) {
			delete require.cache[require.resolve('./buffer-loader!pdfjs-dist/cmaps/' + query.name + '.bcmap')]
			return {
				cMapData: bcmap.default,
				compressionType: CMapCompressionType.BINARY
			}
        })
    }
}

complete CMapReaderFactory.js file

解决办法,拷贝cmap文件到本地,直接引用。 this.src = pdf.createLoadingTask({ // url: this.$route.params.srcId, url: 'http://localhost:8887/22.pdf', cMapUrl: '../../../../static/cmaps/', cMapPacked: true})

原因其实是CMapReaderFactory 对象动态import语言文件的时候缓存了文件,导致第二次取缓存加载时出了问题,把CMapReaderFactory.js的代码改成这样就行了: ` var bcmapName = ‘./buffer-loader!pdfjs-dist/cmaps/’+query.name+‘.bcmap’; return import(bcmapName).then(function(bcmap) { //移除缓存的文件 delete require.cache[require.resolve(bcmapName)];

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

`

解决办法,将cmap文件复制到本地,直接引用。 this.src = pdf.createLoadingTask({ // url: this.$route.params.srcId, url: 'http://localhost:8887/22.pdf', cMapUrl: '../../../../static/cmaps/', cMapPacked: true})

Is there any way not to modify dependent files?

下面的代码可以解决问题吗? const cMapUrl = '../../../node_modules/pdfjs-dist/cmaps/'; /* ... */ pdf.createLoadingTask({ url: pdfs.url[fileName], cMapUrl: cMapUrl, cMapPacked: true });

提示:Error during font loading: unexpected EOF in bcmap

好的,谢谢 ------------------ 原始邮件 ------------------ 发件人: “FranckFreiburger/vue-pdf” <notifications@github.com>; 发送时间: 2020年11月1日(星期天) 凌晨0:34 收件人: “FranckFreiburger/vue-pdf”<vue-pdf@noreply.github.com>; 抄送: “不可思议”<1127850186@qq.com>;“Comment”<comment@noreply.github.com>; 主题: Re: [FranckFreiburger/vue-pdf] Error during font loading: Failed to execute ‘postMessage’ on ‘Worker’: ArrayBuffer at index 0 is already detached (#229) 原因其实是CMapReaderFactory 对象动态import语言文件的时候缓存了文件,导致第二次取缓存加载时出了问题,把CMapReaderFactory.js的代码改成这样就行了: var bcmapName = './buffer-loader!pdfjs-dist/cmaps/'+query.name+'.bcmap'; return import(bcmapName).then(function(bcmap) { //移除缓存的文件 delete require.cache[require.resolve(bcmapName)]; return { cMapData: bcmap.default, compressionType: CMapCompressionType.BINARY, }; }); — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

搞出来了没