PDF.js字体加载期间出错

时间:2014-06-14 11:37:38

标签: javascript pdf

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

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

我要做的是将此文件作为Uint8Array传递给PDF.js. 而且我得到了以下的堆栈跟踪:

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

当我用Acrobat Reader打开它时它工作正常。此外,如果我从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;

}

你可以告诉我一些事情吗?

更新:这似乎是我正在使用的字体的问题 - 'Franklin Gothic Medium Cond',如果我正在尝试使用Helvetica呈现相同的字体,它正在按预期工作。

1 个答案:

答案 0 :(得分:2)

我在服务器端使用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;
}