我在显示以下 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/