Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript pdf.js不使用Safari_Javascript_Safari_Pdf.js_Pdf Rendering - Fatal编程技术网

Javascript pdf.js不使用Safari

Javascript pdf.js不使用Safari,javascript,safari,pdf.js,pdf-rendering,Javascript,Safari,Pdf.js,Pdf Rendering,我们正在测试,虽然这看起来是一个很棒的项目,但我们无法让它在Safari中工作 (在PDF.JS版本=0.8.229(最新)/Safari 5.1.9-6.0.4/Mac OSX 10.6.8-10.8.3上测试) 示例: Warning: Setting up fake worker. Error: Invalid XRef stream (while reading XRef): Error: Invalid XRef stream pdf.js:850undefined Warnin

我们正在测试,虽然这看起来是一个很棒的项目,但我们无法让它在Safari中工作

(在PDF.JS版本=0.8.229(最新)/Safari 5.1.9-6.0.4/Mac OSX 10.6.8-10.8.3上测试)

示例:

Warning: Setting up fake worker. 
Error: Invalid XRef stream (while reading XRef): 
Error: Invalid XRef stream pdf.js:850undefined 
Warning: Indexing all PDF objects 
Error: Invalid XRef stream (while reading XRef): 
Error: Invalid XRef stream pdf.js:850undefined
这是从我们的服务器提供的演示代码示例,其中包含一个在Chrome/FFox上工作但不在Safari上工作的示例PDF:

控制台输出:

Warning: Setting up fake worker. 
Error: Invalid XRef stream (while reading XRef): 
Error: Invalid XRef stream pdf.js:850undefined 
Warning: Indexing all PDF objects 
Error: Invalid XRef stream (while reading XRef): 
Error: Invalid XRef stream pdf.js:850undefined
更多测试:

Warning: Setting up fake worker. 
Error: Invalid XRef stream (while reading XRef): 
Error: Invalid XRef stream pdf.js:850undefined 
Warning: Indexing all PDF objects 
Error: Invalid XRef stream (while reading XRef): 
Error: Invalid XRef stream pdf.js:850undefined
下面是我们测试的PDF示例列表(它们都是从我们的服务器提供的,并且都在Chrome/FFox/Android中工作)。使用Safari的唯一方法是PDF.js项目本身提供的PDF文件:

在SAFARI中失败:


适用于SAFARI:

(注意:这是PDF.js项目中的一个PDF示例,也是我们唯一一个正在工作的示例)


我们已经提交了一份报告,但开发人员似乎没有答案,所以我希望这里的人可能


如何让pdf.js与Safari配合使用?

我在本地服务器上的Safari中使用pdf.js效果很好,但当我将其放在远程服务器上时,又出现了愚蠢的错误:

警告:设置假工作人员。
未处理的拒绝:错误:无效\u状态\u错误:DOM异常11

如果我碰巧打开了开发者控制台,它还会在本地计算机上显示此错误。关闭控制台,PDF显示在Safari中;打开控制台,它就不工作了

问题是:与在本地服务器上运行相比,开发人员工具和远程服务器有什么变化?这仍然是一个范围检查问题吗

不过,我还是让PDF.js工作了!我修改了太多东西,我不知道我所做的工作的哪一部分是有效的。这是我做过的事情的清单

  • 添加了
    compatibility.js
    –将其中的最后一个函数修改为:

    (function checkRangeRequests() {
        var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
    
        if (!isSafari) {
            return;
        }
    
        document.addEventListener('DOMContentLoaded', function (e) {
            if (isSafari) {
                PDFJS.disableRange = true;
            }
        });
    })();
    
  • 更改了
    pdf.js
    xhr.open()
    调用的顺序,以便
    xhr.setRequestHeader()
    xhr.open()之后发生

  • 删除所有
    “严格使用”

  • 添加了
    xhr.setRequestHeader(“缓存控制”、“无缓存”)
    xhr之后。在第37272行和第41262行打开

  • 缩小了
    pdf.js
    ,而且它一直都在工作

  • getDocument()将接受字符串链接或Uint8Array。在我的客户端版本中,我向PDFJS.getDocument()传递一个Uint8Array,但是如果我想要呈现一个现有文件,我只传递文件的路径:

    jspdf第965行:

    PDFJS.getDocument('..files/pdf/sample.pdf').then(function(pdf) {
    

    我不知道是什么原因导致您的safari浏览器出现故障,但如果您能在我的上看到sample.pdf,您必须非常接近于解决此问题。

    我已经找到了如何在Mac safari上工作的方法(不一定了解原因)

  • 必须包括
    compatibility.js

  • 必须分配
    PDFJS.workerSrc

    我一直在测试的演示代码(来自) 尽管其他一些在线示例(包括 第二部分和提供的示例 @AndrewBenjamin–谢谢)。其他浏览器似乎不需要这样做, 但是没有它,Safari就不能工作

    <script type="text/javascript" src="compatibility.js"></script>
    <script type="text/javascript" src="pdf.js"></script>
    
    <!-- NEED THIS for Safari Mac to render work -->
    <script type="text/javascript">
        // Specify the main script used to create a new PDF.JS web worker.  
        // In production, change this to point to the combined `pdf.js` file.  
        PDFJS.workerSrc = 'pdf.worker.js';  
    </script>
    
    
    //指定用于创建新PDF.JS web worker的主脚本。
    //在生产环境中,将其更改为指向组合的'pdf.js'文件。
    PDFJS.workerSrc='pdf.worker.js';
    

  • 同样,我无法解释为什么,但这就是我们如何让它为我们工作的原因

    我对Safari Mobile也有同样的问题。。。无法打开超过1 Mb的PDF。。。我解决了将文件分割成900 kb的部分,在本地连接它们,然后作为Uint8Array()对象注入pdf.js的问题。我认为这是一个没有文档记录的限制。

    我已经找到了在Mac Safari和iPad上工作的方法 我在一开始就取消了“严格模式”

    1. pdf.js/src/core/worker.js
    2. pdf.js/web/download_manager.js
    

    而且成功了

    感谢您的努力,但我应用了您描述的所有更改,结果没有任何变化。你还可以做些什么来让它工作吗?我测试过的Safari的唯一版本是5.1.7。我的pdf.js工作的网站在这里:。看看它是否适用于您的狩猎活动,并让我知道(如果它适用,您将看到丑陋的“Rocks To the KORE”pdf漂浮在右侧)。如果有,那么我将按原样打包文件,并使它们对您可用。@AndrewBenjamin-是的,您的链接在我的Safari上起作用。然而,当我下载了你的pdf.js版本并尝试在本地演示中使用它时,在Safari上出现了一个新错误:pdf.js:2107未经处理的拒绝:在检索pdf“”时出现意外的服务器响应(206)…@Yarin-我已将其简化为一个包并对其进行了测试。在线测试在www.korenation.com/test上。软件包在我的dropbox中,您可以下载。在Safari中唯一不起作用的就是下载。我正在慢慢缩小问题的范围——safari调试器甚至没有检测到错误——只是什么都没有发生。要下载pdf,任何其他浏览器都可以。Firefox做得最好。如果你能找出safari不下载pdf的原因,那就太好了。总是Safari不起作用——在过去的两天里,我给Safari开发者打过电话。