javascript - PDF.js 字体加载期间出错

标签 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 渲染相同的字体,它会按预期工作。

最佳答案

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

关于javascript - PDF.js 字体加载期间出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24219521/

相关文章:

javascript - 通过字符串访问本地范围的变量——除了 eval 之外还有什么?

javascript - 通过前端进行缓存控制?

javascript - Angular 2 App 中项目之间没有逗号的数据绑定(bind)

php - Composer 要求在安装 barryvdh/laravel-dompdf 时出错

python - PDF 表单字段操作

pdf.document 的快速滚动位置

php - 从网络服务 nusoap 接收 pdf 内容的奇怪行为

javascript - 500 内部错误 - 错误 TokenMismatchException

javascript - 使用键盘切换或滚动固定高度的 HTML 表格单元格

servlets - 禁用 Adob​​e PDF 阅读器中的保存按钮并隐藏 IE 窗口中的菜单栏