Olá,
Estou tentando integrar a biblioteca pdf.js com o app electron. O principal motivo para fazer isso é ter um visualizador de PDF no aplicativo e imprimir o documento.
Em primeiro lugar, tentei integrar a biblioteca de duas maneiras:
Eu tenho as seguintes perguntas:
</div>
<canvas id="theCanvas"></canvas>
<div>
PDFJS.getDocument(pdfPath).then(function getPdfHelloWorld(pdf) {
pdf.getPage(1).then(function getPageHelloWorld(page) {
var scale = 1.5;
var viewport = page.getViewport(scale);
var canvas = document.getElementById('theCanvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
});
});
No entanto, isso é apenas parte do que desejo. Eu quero os controles do visualizador como em viewer.html. Então, tentei abrir uma nova janela diretamente com viewer.html assim:
var pdfPath = __dirname + '/pdfs/trial.pdf';
mainWindow.loadURL('file://' + __dirname + '/generic/web/viewer.html?file=' + pdfPath);
Consegui ver o visualizador, mas ao carregar o arquivo pdf, ele gerou este erro no console:
Não capturado (em promessa) TypeError: PDFJS.getDocument não é uma função
em Object.pdfViewOpen como aberto
em webViewerInitialized (file: ///.../src/generic/web/viewer.js: 7686: 26)
Não consigo descobrir o que estou fazendo de errado aqui. Esta é a forma recomendada? Além disso, se eu quiser incorporar esse visualizador inteiro em alguma tela ou iframe, como posso fazer isso? Seria bom ter uma lista de APIs no projeto para fazer certas tarefas comuns, como o que estou tentando. Desculpe, se já está lá e eu não consigo encontrar.
Ficaria muito grato se alguém pudesse me ajudar aqui.
Desde já, obrigado...
Configuração:
Versão PDF.js: 0.8.0
Essa é uma versão muito antiga. A versão pré-compilada de nossos lançamentos (ou gulp generic
one) deve funcionar bem, com a exceção de que você mesmo pode carregar o pdf no Uint8Array.
PDFJS.getDocument não é uma função
Isso indica que a biblioteca PDF.js principal (arquivo './build/pdf.js') não foi carregada.
Obrigado pela sua pronta resposta Yury.
Essa é uma versão muito antiga.
Não tenho certeza de como consegui essa versão antiga. Eu não fiz nada especial além de git clone git://github.com/mozilla/pdf.js.git
para obter o projeto. No entanto, se eu vejo aqui, o package.json ainda mostra 0.8.0.
A versão pré-compilada de nossos lançamentos (ou gulp genérica) deve funcionar bem, com a exceção de que você mesmo pode carregar o pdf no Uint8Array.
Você está falando sobre este zip pré-construído? .
Isso indica que a biblioteca PDF.js principal (arquivo './build/pdf.js') não foi carregada.
Depois de fazer o gulp generic, peguei o pdf.js e o pdf.worker.js em dois lugares. Um fora do diretório genérico e um dentro do diretório / build / genérico. No momento, estou apontando para o lado de fora. Você pode me avisar se eu estiver apontando para o endereço errado?
Mais uma vez obrigado pela ajuda!
o package.json ainda mostra 0.8.0.
package.json não contém a versão da biblioteca construída, consulte o arquivo pdf.js ou a propriedade PDFJS.version para obter o número da versão correta.
Você pode me avisar se eu estiver apontando para o endereço errado?
Ambos devem ser idênticos. Você tem que usar a pasta "generic /" inteira, então você terá pdf.js no lugar certo.
consulte o arquivo pdf.js ou a propriedade PDFJS.version
Diz versão: 1.4.174
Além disso, descobri o problema. Copiei as coisas certas do diretório genérico; no entanto, quando abro uma janela com viewer.html url; a propriedade da janela deve ter isto:
webPreferences: {
nodeIntegration: false
}
E agora pode carregar bem.
Obrigado pela ajuda Yury!
Comentários muito úteis
Diz versão: 1.4.174
Além disso, descobri o problema. Copiei as coisas certas do diretório genérico; no entanto, quando abro uma janela com viewer.html url; a propriedade da janela deve ter isto:
webPreferences: { nodeIntegration: false }
E agora pode carregar bem.
Obrigado pela ajuda Yury!