Pdf.js: Executando pdf.js com elétron

Criado em 30 mar. 2016  ·  4Comentários  ·  Fonte: mozilla/pdf.js

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:

  1. Clonando pdf.js em um diretório separado e executando _gulp generic_ e tudo o que obtive no diretório de compilação, copiei para o diretório src em meu projeto.
  2. Incluindo o módulo de nó em meu projeto a partir daqui: https://www.npmjs.com/package/pdfjs-dist-for-node

Eu tenho as seguintes perguntas:

  • Seguindo o primeiro caminho, sou capaz de mostrar (basicamente renderizar) o arquivo pdf (sem os controles do visualizador) na tela da minha página html por meio deste código:

</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.

  • Seguindo a segunda rota, consegui incluir o módulo de nó; mas a preocupação que tenho aqui é que ele não é atualizado com frequência à medida que o projeto é atualizado. O último lançamento foi há um ano. E não havia API lá novamente. Então, abandonei o plano por enquanto.

Ficaria muito grato se alguém pudesse me ajudar aqui.

Desde já, obrigado...

Configuração:

  • Navegador da web e sua versão: Electron
  • Sistema operacional e sua versão: OSX 10.10.5
  • Versão PDF.js: 0.8.0
1-other

Comentários muito úteis

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!

Todos 4 comentários

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.

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!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

PeterNerlich picture PeterNerlich  ·  3Comentários

liuzhen2008 picture liuzhen2008  ·  4Comentários

patelsumit5192 picture patelsumit5192  ·  3Comentários

azetutu picture azetutu  ·  4Comentários

zerr0s picture zerr0s  ·  3Comentários