2014-12-31 7 views
6
  • браузер: Chrome
  • среды: Grails приложение локального

Я бег приложение Grails на локальном хосте (который я знаю, что есть проблема с pdf.js и локальная файловая система) и вместо использования файла: url, который, как я знаю, будет терпеть неудачу. Я прохожу в типизированном массиве javascript, и он все еще не работает. Правильно это не говорит мне ничего, кроме «Предупреждение: создание поддельного работника». и тогда он ничего не делает.pdf.js неудачи на GetDocument

this.base64ToBinary = function(dataURI) { 
     var BASE64_MARKER = ';base64,'; 
     var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length; 
     var base64 = dataURI.substring(base64Index); 
     var raw = window.atob(base64); 
     var rawLength = raw.length; 
     var array = new Uint8Array(new ArrayBuffer(rawLength)); 

     for(i = 0; i < rawLength; i++) { 
     array[i] = raw.charCodeAt(i); 
     } 
     return array; 
    }; 

PDFJS.disableWorker = true; // due to CORS 

// I convert some base64 data to binary data here which comes back correctly 
var data = utilities.base64ToBinary(result); 

PDFJS.getDocument(data).then(function (pdf) { 
     //nothing console logs or reaches here 
     console.log(pdf); 
}).catch(function(error){ 
//no error message is logged either 
      console.log("Error occurred", error); 
     }); 

Мне интересно, не настроен ли я правильно? Могу ли я использовать эту библиотеку исключительно на стороне клиента, просто включив в нее файл pdf.js или мне нужно включить viewer.js тоже? а также я заметил файл совместимости ... настройка не очень ясна, и в этом примере работает FIDDLE, а у меня нет, и я не понимаю разницы. Также, если я использую url, поставляемый в этом примере, он также говорит то же самое.

enter image description here

+1

Что utilities.base64ToBinary делает возвращение? Если это не Uint8Array, тогда это не сработает. Кроме того, добавьте второй обратный вызов ошибки к вызову 'then', который покажет причину сбоя. – async5

+0

@ async5 Я отредактировал свой вопрос, чтобы включить функцию, которую я использую, чтобы создать Uint8Array, чтобы def создать массив правильно. Такая же ошибка возникает, когда я использую URL-адрес, указанный в примере скрипта, так что происходит что-то еще. Позвольте мне попробовать функцию ошибки и посмотреть, какие урожаи. – btm1

+0

@ async5 Каков формат функции ошибки? Это так? : PDFJS.getDocument (data) .then (function() {}). Error (function (data) {}); Это не работает. – btm1

ответ

14

я получаю ответ на свой вопрос:

документация не ясно вообще. Если вы не определяете файл PDFJS.workerSrc, чтобы указать на правильный файл pdf.worker.js, чем в pdf.js, он пытается выяснить, какой правильный путь src принадлежит файлу и загрузить его.

Их метод, однако, довольно схематичны для этого:

if (!PDFJS.workerSrc && typeof document !== 'undefined') { 
    // workerSrc is not set -- using last script url to define default location 
    PDFJS.workerSrc = (function() { 
    'use strict'; 
    var scriptTagContainer = document.body || 
          document.getElementsByTagName('head')[0]; 
    var pdfjsSrc = scriptTagContainer.lastChild.src; 
    return pdfjsSrc && pdfjsSrc.replace(/\.js$/i, '.worker.js'); 
    })(); 
} 

Они только захватить последний тег сценария в голову и считать, что это правильный ЦСИ, чтобы загрузить файл вместо того, чтобы искать все теги сценария для src, который содержит «pdf.js», и используя это как правильное.

Вместо этого они должны просто дать понять, и требуют, чтобы вы на самом деле точка PDFJS.workerSrc = «(ваш путь) /pdf.worker.js»

+0

, если это ответ, можете ли вы отметить его как таковой? – async5

+0

Просто наткнулся на это сам. Спасибо, что ответили на это и заглянули в него! – contactmatt

Смежные вопросы