PDF с размером 25 МБ не читается в монокле читателя

Я только начал использовать программу чтения моноклей и попробовал использовать PDF, который я скачал до того, как у него было примерно 800 страниц и размер файла 25 МБ, проблема в том, что монокль возвращается с этой ошибкой

Ошибка типа: невозможно прочитать свойство 'onFirstPageOfBook' со значением NULL

Ресурс интерпретируется как Документ, но передается с приложением 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 URL

1 ответ

Решение

PDF-файлы могут не поддерживаться официально моноклем JS: 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-файлы загружаются нормально.

Кроме того, когда я запускаю HTML-страницу monocle через отладчик Theseus, сбойные PDF-файлы также прекрасно загружаются.

Еще один момент, monocle js - загрузка PDF-файлов в тег для вставки. Тот же код вставки тега, загруженный независимо от монокля js, загружается просто отлично. И те, которые работают, загружают 2 страницы, оба встраивают теги с одним и тем же URL-адресом PDF. Те, которые не работают, реализуют только один встроенный тег, но не все идентификаторы монокля есть.

Это может быть связано с размером файла. Я не смог загрузить PDF на 555K, но 412K и ниже загрузились нормально.

Это неприятный хак, но он загружает PDF-файлы, которые иначе не будут:

//Monocle.Events.listen(frame, 'load', onDocumentReady);
//Monocle.Events.listen(frame, 'load', onDocumentLoad);
frame.contentWindow.location.replace(url);
onDocumentReady();
onDocumentLoad();
Другие вопросы по тегам