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
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();