0

我刚开始使用单片机阅读器并尝试使用我下载的 pdf,它大约有 800 页和 25mb 文件大小,现在的问题是单片机返回此错误

TypeError:无法读取 null 的属性“onFirstPageOfBook”

资源解释为文档,但使用 MIME 类型应用程序/pdf 传输

如果我使用 1 页 pdf,它可以正常工作。

这是我的代码:

<script type="text/javascript">

    var bookData = {
        getComponents: function () {
            return [
                'coolresume.pdf',
                'content1.html'
                ];
        },
        getContents: function () {
            return [
                {title: "Chapter 1", src: 'coolresume.pdf'},
                {title: "Chapter 2", src: 'content1.html'}
                ]
        },
        getComponent: function (componentId) {
            return {url:componentId};
        },
        getMetaData: function(key) {
            return {
                title: "Test document",
                creator: "Aron Woost"
                }[key];
        }
    }

    Monocle.Events.listen(
        window,
        'load',
        function () {
            window.reader = Monocle.Reader('reader', bookData);
        }
    );
</script>

单片眼镜

这是我得到了我的示例 PDF,这也适用于将相同的 PDF 转换为 EPUB 时

PDF 网址

4

1 回答 1

1

monocle js 可能不正式支持 PDF:https ://groups.google.com/forum/#!searchin/monocle-js/pdf/monocle-js/0ue1t243JLg/hgOPIQaramQJ

然而,有些 PDF 可以工作,有些则不能。我已经跟踪了那些不归结为 monocle js 源代码的那些,第 3555、3556、3557 行:

Monocle.Events.listen(frame, 'load', onDocumentReady);
Monocle.Events.listen(frame, 'load', onDocumentLoad);
frame.contentWindow.location.replace(url);

...使用 PDF 作为源,将url值发送到frame.contentWindow.location.replace函数,但对于某些 PDF,load事件不会触发,因此之前附加的函数不会执行,脚本会因空白页而停止,但其他 PDF 加载正常。

此外,当我通过 theseus 调试器运行单片机 HTML 页面时,失败的 PDF 也可以正常加载。

另一点,monocle js 正在将 PDF 加载到 embed 标记中。独立于 monocle js 加载的相同嵌入标签代码就可以了。而那些加载 2 页的,都嵌入了具有相同 PDF url 的标签。那些不起作用的只实现了一个嵌入标签,但并不是所有的单片眼镜 id 都在那里。

它可能与文件大小有关。我无法以 555K 加载 PDF,但 412K 及更低加载正常。

这是一个令人讨厌的 hack,但这会加载原本不会加载的 PDF:

//Monocle.Events.listen(frame, 'load', onDocumentReady);
//Monocle.Events.listen(frame, 'load', onDocumentLoad);
frame.contentWindow.location.replace(url);
onDocumentReady();
onDocumentLoad();
于 2014-06-09T03:48:09.670 回答