首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDFJS和PDF编码

PDFJS和PDF编码
EN

Stack Overflow用户
提问于 2016-06-07 07:53:56
回答 1查看 4K关注 0票数 4

我们正在实施PDFJS在一个网站上呈现pdf文件。

当尝试将PDFdocument/Viewer初始化为arrayBuffer时,我们会得到各种各样的错误,并且文件不会呈现。当从url (DEFAULT_URL变量)在查看器中打开相同的文件时,该文件呈现良好。

然而,有一些文件确实呈现为流。比较记事本中的这些文件显示它们有不同的编码/字符。

这段代码用于在查看器中打开文件:

代码语言:javascript
复制
function rawStringToBuffer( str ) {
    var idx, len = str.length, arr = new Array( len );
    for ( idx = 0 ; idx < len ; ++idx ) {
        arr[ idx ] = str.charCodeAt(idx) & 0xFF;
    }
    return new Uint8Array( arr ).buffer;
}

function readSingleFile(e) {
  var file = e.target.files[0];
  if (!file) {
    return;
  }
  var reader = new FileReader();
  reader.onload = function(e) {
    var contents = e.target.result;

    var uint8array = rawStringToBuffer(contents);

    pdfjsframe.contentWindow.PDFViewerApplication.open(uint8array,0);

    };
    reader.readAsText(file);
}

test.pdf helloworld,它不是用上面的代码呈现的。

test2.pdf helloworld,它与上面的代码一起呈现。

这种行为与浏览器无关。构建是b15f335。

查看器的代码或默认配置是否会导致test.pdf不能由查看器呈现?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-22 19:21:09

我不认为您的字符串转换例程rawStringToBuffer()可以满足您的需要。您正在以文本形式读取文件,它将UTF-8转换为UTF-16。但是rawStringToBuffer()只接受每个UTF-16字符的低阶字节,并丢弃高阶字节,而不是逆变换。这将适用于7位ASCII数据,但不适用于其他字符.将字符串转换为UTF-8的最佳方法是使用TextEncoder API (不是所有浏览器都支持,但可以使用多填充)。

然而,转换数据从UTF-8和返回是不必要的。只需使用FileReader.readAsArrayBuffer()而不是readAsText()直接生成ArrayBuffer

下面是一个(未经测试的)替换函数:

代码语言:javascript
复制
function readSingleFile(e) {
  var file = e.target.files[0];
  if (!file) {
    return;
  }
  var reader = new FileReader();
  reader.onload = function(e) {
    var contents = e.target.result;

    pdfjsframe.contentWindow.PDFViewerApplication.open(contents, 0);
  };
  reader.readAsArrayBuffer(file);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37673583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档