PDF.js字体加载错误

PDF.js Error during font loading

本文关键字:错误 加载 字体 js PDF      更新时间:2023-09-26

我在显示以下PDF文件时遇到问题。

https://onedrive.live.com/redir?resid=BA2E9E42862EC5A7%21280

我要做的是把这个文件作为Uint8Array传递给PDF.js。我得到了下面的stacktrace:

Warning: Setting up fake worker. pdf.js:106
(while reading XRef): TypeError: Cannot read property 'get' of undefined        pdf.worker.js:5281
Error
at XRefParseExceptionClosure (http://127.0.0.1:8090/assets/js/vendor/pdf-   js/pdf.worker.js:310:34)
at pdfjsWrapper (http://127.0.0.1:8090/assets/js/vendor/pdf-js/pdf.worker.js:315:3)
at http://127.0.0.1:8090/assets/js/vendor/pdf-js/pdf.worker.js:39174:4  pdf.worker.js:3801
Warning: Indexing all PDF objects pdf.worker.js:106
Error: Bad FCHECK in flate stream: 120, 253 pdf.worker.js:122
at error (http://127.0.0.1:8090/assets/js/vendor/pdf-js/pdf.worker.js:124:7)
at Object.FlateStream (http://127.0.0.1:8090/assets/js/vendor/pdf- js/pdf.worker.js:32044:7)
at Object.Parser_makeFilter [as makeFilter]   (http://127.0.0.1:8090/assets/js/vendor/pdf-js/pdf.worker.js:31227:16)
at Object.Parser_filter [as filter] (http://127.0.0.1:8090/assets/js/vendor/pdf- js/pdf.worker.js:31212:25)
at Object.Parser_makeStream [as makeStream]  (http://127.0.0.1:8090/assets/js/vendor/pdf-js/pdf.worker.js:31192:21)
at Object.Parser_getObj [as getObj] (http://127.0.0.1:8090/assets/js/vendor/pdf-    js/pdf.worker.js:31028:18)
at Object.XRef_fetch [as fetch] (http://127.0.0.1:8090/assets/js/vendor/pdf- js/pdf.worker.js:5352:22)
at Object.XRef_fetchIfRef [as fetchIfRef] (http://127.0.0.1:8090/assets/js/vendor/pdf-js/pdf.worker.js:5298:19)
at Object.Dict_get [as get] (http://127.0.0.1:8090/assets/js/vendor/pdf-js/pdf.worker.js:4466:28) pdf.worker.js:124
Warning: Error during font loading: Bad FCHECK in flate stream: 120, 253 pdf.js:106
page=1 - getOperatorList: time=4ms, len=0 pdf.worker.js:34290

当我用acrobatreader打开它时它工作得很好。此外,如果我从URI打开它之前将其保存到文件系统,它也可以在PDF.js中正常工作。

对于转换,我使用以下函数:

function conver(str) {
  var length = str.length;
  var bytes = new Uint8Array(length);
  for (var n = 0; n < length; ++n)
     bytes[n] = str.charCodeAt(n) & 0xFF;
  return bytes;

}

关于那件事你能给我一些建议吗?

UPDATE:这似乎是我使用的字体的问题- 'Franklin Gothic Medium Cond',如果我试图用Helvetica渲染相同的字体,它会按预期工作。

我在服务器端使用base64编码解决了这个问题。因此,我使用这个函数将base64转换为类型化数组:

function convert (base64) {
    var raw = atob(base64);
    var arr = new Uint8Array(new ArrayBuffer(raw.length));
    for (var i = 0; i < raw.length; i++) {
        arr[i] = raw.charCodeAt(i);
    }
    return arr;
}