Pdf.js: Assinaturas digitais em pdf.js

Criado em 13 jan. 2012  ·  174Comentários  ·  Fonte: mozilla/pdf.js

Oi! Estamos interessados ​​em saber quando ou se você vai implementar a Visualização de Dados de Assinatura (Xades, Pades & Cades) no visualizador de PDF (PDF.js)

Atenciosamente

Alejandro Pinedo,
SOA-X

2-feature 4-annotations

Comentários muito úteis

Para todas as pessoas acima, use o novo botão +1 de reação do GitHub em vez de adicionar comentários aqui.

Todos 174 comentários

Atualmente não há planos iminentes para implementar este recurso. Não vimos isso surgir muito, então não tem sido uma prioridade. No entanto, estamos sempre procurando por mais contribuidores, portanto, receberíamos qualquer patch para adicionar esse recurso. Se estiver interessado em adicioná-lo, sinta-se à vontade para visitar nosso canal IRC (#pdfjs irc.mozilla.org) se tiver dúvidas.

Brendan

Oi

qual é o estado atual da implementação deste recurso?

obrigado

@ fermo111 Ainda não implementado, mas terei o maior prazer em treinar alguém que esteja disposto a assumir esta tarefa.

@yurydelendik Estou interessado em implementar o recurso de apresentação de assinaturas digitais de arquivos PDF em pdf.js. Como posso entrar em contato com você?

@wolvz por favor me encontre no canal #pdfjs do IRC irc.mozilla.org (que é o mais simples) ou junte-se a qualquer uma de nossas reuniões públicas para coordenar as coisas.

Estou tentando implementar SigWidgetAnnotation (como TextAnnotation, LinkAnnotation), em annotation.js, para suportar assinaturas digitais em pdf.js.
A assinatura está aparecendo no visualizador de PDF, e já posso extrair e verificar os certificados incorporados no objeto PKCS7 codificado por DER ...
Agora estou indo para a próxima etapa, que é verificar o resumo da mensagem do arquivo.
Para isso preciso ter acesso ao conteúdo do arquivo ... Não sei se é possível ou não ter acesso a ele a partir do annotation.js, mas não consigo descobrir. O melhor que pude fazer foi obter o conteúdo em core.js usando:

var contentStreamPromise = this.pdfManager.ensure (this, 'getContentStream', []);
var dataPromises = Promise.all ([contentStreamPromise]);
dataPromises.then (function (data) {
var contentStream = data [0];
var contents = contentStream.str.bytes;
retornar conteúdo;
});

Alguém pode me esclarecer sobre qual é a melhor maneira de obter o conteúdo do arquivo em annotation.js?
Desde já, obrigado...

wolvz,
algum progresso a este respeito?

@yurydelendik @wolvz
Estou extremamente interessado no recurso de exibição de assinatura digital. Clonei o repositório do wolvz e construí o código, mas quando tento usá-lo, recebo uma rejeição de promessa com este erro: "require is not defined". Alguém poderia explicar o que causaria esse erro e como eu poderia corrigi-lo? Além disso, estou muito disposto a continuar o trabalho neste recurso. Já trabalhei com PDFs em Java através da biblioteca iText, mas trabalhar com eles em javascript é algo que nunca tentei antes. Alguém poderia me indicar alguma documentação / tutorial que poderia me apontar na direção certa para que eu pudesse descobrir por onde começar enquanto tento mover esse recurso mais adiante no campo?

Estou confuso. O que eu tenho que fazer na minha biblioteca pdf.js para mostrar a assinatura digital pdf em pdfJS

untitled

Esta assinatura e o certificado aparecem em pdf .. mas quando eu abro em pdf.js ele não aparece lá.

@ mrpandya007 , a assinatura digital não é exibida porque os desenvolvedores optaram por ocultá-la até que o recurso de verificação de assinatura funcione.
Se bem me lembro, se você quiser que eles simplesmente apareçam, você deve comentar as linhas 389 a 392 aqui: https://github.com/mozilla/pdf.js/blob/master/src/core/annotation.js#L389
Não tenho certeza, e não posso testá-lo agora.

@wolvz , Thanx pela resposta mas já comentado. Por favor, dê uma olhada nisto ,, A assinatura de pdf gerado do Crystal Report não está aparecendo, mas o pdf gerado pelo DevExpress está sendo mostrado corretamente

Por favor, me responda .... o que eu tenho que fazer .. Eu posso te dar aquele pdf para teste

Não há um bom suporte para assinaturas digitais ainda, então isso terá que ser implementado.

Quantos dias vai demorar para consertar este problema de assinatura digital porque dependemos de sua biblioteca.

Pode levar muito tempo, pois esse recurso terá que ser desenvolvido por alguém e atualmente existem problemas de maior prioridade.

heading

Por que estou enfrentando esse problema de "=" assinar em Títulos, apenas em pdf.js, após baixar o arquivo ele foi embora.
qualquer solução, por favor. Isso acontece apenas em pdf gerado por telerik.

@ mrpandya007 Por favor, não poste questões não relacionadas dentro de outras edições. Abra uma edição separada para esse problema.

Eu também encontrei o mesmo problema. Embora eu não exija necessariamente a validação da assinatura, no meu caso seria suficiente apenas mostrar a imagem da assinatura. Talvez até que a validação da assinatura seja implementada, em vez de não mostrar a imagem, seja melhor mostrar a imagem e fazer uma anotação com um pequeno texto que diz algo como "Validação da assinatura não implementada. Status da assinatura desconhecido"? Portanto, pelo menos visualmente, o pdf mostraria o que você esperaria.

Existe um cronograma para quando esse problema será tratado? Ou devemos considerar outro produto?
pdfjsissue

Ninguém está trabalhando nisso ainda, pelo que eu sei, então, se alguém estiver disposto a trabalhar nisso, fique à vontade para enviar um PR.

Oi,
Uma versão PDF.JS que é capaz de exibir apenas campos de assinatura digital deve ser suficiente para muitos usuários ... Existe algum "fork" capaz de fazer isso?
Saudações

@DORNINEM você só precisa comentar o trecho de código que esconde as anotações de assinatura.
Mas de qualquer forma, aqui está o fork que você pediu: https://github.com/wolvz/pdf.js

@wolvz !! Muito obrigado.
Estou me perguntando por que esse recurso não está na versão oficial, pois funciona muito bem. Testei alguns dos meus arquivos PDF assinados (de 1 a 6 campos de assinatura diferentes) e o resultado é perfeito!
Tenho certeza de que a necessidade real é exibir esses campos, não validar a assinatura. A validação da assinatura é melhor feita no lado do servidor, pois às vezes requer certificados não instalados em um repositório de certificados local.

Olá,

Alguém pode explicar qual linha devemos comentar ou descomentar para permitir que o pdf.js exiba a assinatura digital?

Obrigado por todas as informações :)

@maximlefebvre De acordo com https://github.com/wolvz/pdf.js/commit/7df3f4fe6e21b888358fd7718cb15e3c266ba066 , isso deve ser suficiente para permitir que PDF.js exiba a assinatura. Observe, entretanto, que isso não foi verificado pela equipe do PDF.js como uma solução estável (por isso ainda não está na base de código oficial), mas pode funcionar como uma solução temporária.

Estamos interessados ​​em implementar a verificação de assinatura. Parece que @wolvz começou a trabalhar nisso, mas não o concluiu - você tem algum código parcial no qual possamos trabalhar?

@wolvz , você pode nos ajudar fazendo uma pequena observação para entender seu repo. Não consigo entender como começar a verificar seu código. Estamos tentando implementar a assinatura e talvez possamos concluir seu projeto e ajudar a comunidade.

Implementamos a assinatura e a verificação de assinatura de PDFs no navegador usando https: // pkijs . Você pode ver uma demonstração de verificação de assinatura aqui: https://pkijs.org/examples/PDFexample.html ainda não nos integramos com PDFjs, mas estará fazendo isso em um futuro não tão distante. Nossa intenção é liberar a maior parte disso como OSS e devolver quaisquer alterações nos PDFjs que sejam necessárias para facilitar a integração.

Incrível, obrigado @rmhrisk! No entanto, não tenho certeza de como criar um arquivo de pacote CA. Você tem detalhes sobre como fazer isso? Eu imagino que quando isso está integrado com o pdf.js seria mais "plug and play", pois vem com Adobe Root CA por padrão e pode verificar a cadeia de certificados, certo? E você tem um cronograma esperado para a integração do pdf.js? Seu trabalho é imensamente apreciado!

Há um aqui: http://curl.haxx.se/ca/cacert.pem e um registrado no repositório em exemplos.

Há uma ferramenta para criar um aqui: https://github.com/PeculiarVentures/tl-create

Não posso compartilhar um ETA no momento, estamos com recursos limitados e isso é importante para nós, mas precisamos terminar algumas partes mais complexas primeiro.

Tentei aquele que você vinculou, bem como alguns certificados que tentei extrair do PDF usando Adobe Reader, mas sempre recebo o erro "TypeError: Cannot read property 'signature_time_stamp' of undefined" (no Safari / Chrome stable / Chrome canário).

Acontece que terei algum tempo na próxima semana, então deixe-me saber se posso ajudar com a fusão no pdf.js de alguma forma.

Essa amostra só oferece suporte a assinaturas básicas, sem carimbo de data / hora ou LTV no momento. Sinta-se à vontade para me enviar um ping em rmh em unmitigatedrisk ponto com

Ah, entendo. Para referência, finalmente consegui funcionar no Chrome / Firefox (mas não no Safari, que aparentemente só suporta WebCrypto prefixado ) usando este pacote CA e este arquivo PDF .

Sim, isso também, não é apenas o problema do prefixo, mas eles também suportam criptografia web suficiente para lidar com casos drm do netflix. Por exemplo, eles não permitem que você exporte a chave pública para um par de chaves que você gerar !? Este é um bom recurso para verificar o suporte do navegador - https://diafygi.github.io/webcrypto-examples/

@viveksjain Você pode confirmar como fez isso funcionar no Chrome / Firefox

Eu tentei usar o plugin de desenvolvimento no firefox, mas ele ainda parece não mostrar as assinaturas.
http://mozilla.github.io/pdf.js/extensions/firefox/pdf.js.xpi

@complience ele obteve o código de amostra localizado em https://pkijs.org/examples/PDFexample.html working not PDFjs

Olá @complience , tenho uma prova de conceito funcionando em https://github.com/viveksjain/pdf.js/tree/sig-verify-support. Você pode tentar usando git clone --recursive https://github.com/viveksjain/pdf.js.git . Com um pouco mais de trabalho, ele deve estar pronto para uma solicitação pull neste repo, mas ainda não tive tempo.

@viveksjain legal! O que ainda é necessário antes de estar pronto para uma solicitação de pull?

+1 Prazer em obter esta funcionalidade.

Sim, isso será um grande valor agregado para a comunidade, abrindo a porta para muitos casos de uso. Obrigado!!

+1 para esta funcionalidade

+1 para esta funcionalidade

Para todas as pessoas acima, use o novo botão +1 de reação do GitHub em vez de adicionar comentários aqui.

+ 1 para esta funcionalidade

👍 + 1 para esta funcionalidade

Novamente, use o botão de reação do GitHub no comentário superior para votar a favor dessa funcionalidade, o que nos ajudará a priorizar o problema. Adicionar comentários "+1" causa notificações desnecessárias para os desenvolvedores.

"TypeError: Não é possível ler a propriedade 'signature_time_stamp' de undefined" usando o branch de @viveksjain

+1. Esperando por esse recurso! ..

Quando essa funcionalidade estará disponível? O que aconteceu com o progresso de viveksjain?

@complience Olá, tenho uma prova de conceito funcionando em https://github.com/viveksjain/pdf.js/tree/sig-verify-support. Você pode tentar usando git clone --recursive https://github.com/viveksjain/pdf.js.git. Com um pouco mais de trabalho, ele deve estar pronto para uma solicitação de pull no esta repo, mas ainda não tive tempo.

@lexcorp Infelizmente, isso se tornou uma prioridade menor para mim depois da minha mensagem anterior. Vou ver se consigo fazer isso, mas não vou fazer nenhuma promessa que não possa cumprir ...

Estou tentando compilar esta versão: https://github.com/viveksjain/pdf.js/tree/sig-verify-support
Quando eu insiro o comando: node make generic
Eu recebo a mensagem: ### Obtendo número de compilação de extensão
E o processo de compilação não é executado

Como posso resolver esse erro?
Eu estou fazendo algo errado?
Por que não encerrar a compilação?

@lexcorp Se ainda houver interesse, pelo menos minha versão está atualizada o suficiente para compilar. : +1:

Oi Vivek, sim, ainda estou interessado, obrigado ...

12-12-2016 12:55 GMT-06: 00 Gustavo Zambonin [email protected] :

@lexcorp https://github.com/lexcorp Se ainda houver algum interesse, em
pelo menos minha versão é atualizada o suficiente para compilar. 👍

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/mozilla/pdf.js/issues/1076#issuecomment-266518165 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AFfB-LbmIVIrJLnxwJlm8aDITDKh5tWLks5rHZi5gaJpZM4BlvMP
.

Ei Gustavo, obrigado ...

12-12-2016 12:55 GMT-06: 00 Gustavo Zambonin [email protected] :

@lexcorp https://github.com/lexcorp Se ainda houver algum interesse, em
pelo menos minha versão é atualizada o suficiente para compilar. 👍

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/mozilla/pdf.js/issues/1076#issuecomment-266518165 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AFfB-LbmIVIrJLnxwJlm8aDITDKh5tWLks5rHZi5gaJpZM4BlvMP
.

Existe um problema de por que o suporte para assinaturas digitais não é puxado para pdf.js?

Siga a discussão em # 7702.

Estou interessado em ouvir as pessoas sobre seus casos de uso para verificação de assinatura em PDFjs. Envie um e-mail para ryan em peculiarventures.com com seu caso de uso.

Também estou interessado em ouvir seus casos de uso para assinar PDFjs. Se você se preocupa com esse cenário, também gostaria de ouvir seu caso de uso.

O ramo sig-verify-support do pdf.js não oferece suporte ao IE e ao firefox perfeitamente porque o WebCrypto não pode ser obtido, alguma idéia de como lidar com isso?

Olá pessoal, a verificação de assinatura digital já está funcionando?

A mesma pergunta aqui: as assinaturas digitais devem funcionar com a versão estável mais recente, que pode ser baixada em https://mozilla.github.io/pdf.js/getting_started/#download ?

FWIW: Testei a versão beta atualmente disponível e não consigo ver nenhuma assinatura. A única coisa que noto é a seguinte linha no console do navegador:

Warning: Unimplemented widget field type "Sig", falling back to base field type

Não, as assinaturas digitais ainda não foram implementadas. Qualquer pessoa que queira trabalhar nisso pode enviar uma solicitação de pull. Obrigado.

Eu quero trabalhar nesta funcionalidade. Alguém pode me dar algumas orientações sobre os componentes internos do PDF.js?

Há algum trabalho inicial mencionado acima que você pode usar. Certifique-se de ler o wiki para o estilo de código e as instruções de teste.

@wolvz : olá, qual parte do viewer.js seria descomente? seu repositório parece ser a fonte original para pdf.js

a maioria dos usuários, entretanto, usaria os arquivos da versão estável.

Como o plugin Adobe Acrobat estará obsoleto quando o Mozilla Firefox 59 ESR for lançado, recursos como a exibição de assinaturas digitais agora são realmente necessários no pdf.js para usuários corporativos.

Implementamos uma solução de assinatura digital baseada em PKIjs e PDFjs que é capaz de verificar e criar assinaturas digitais. Você pode ver um exemplo disso vendo a lei de assinatura digital dos EUA aqui .

image

O visualizador atualmente confia nas CAs na lista de confiança do eIDAS, bem como nos emissores S / MIME confiáveis ​​da Mozilla.

Se você encontrar qualquer problema, envie-me um e-mail para [email protected] com arquivos de amostra, se houver.

@rmhrisk você pode fornecer um

@xrkolovos a grande maioria do trabalho necessário para fazer o trabalho de assinatura e verificação foi de código aberto; inclui https://github.com/PeculiarVentures/PKI.js , https://github.com/PeculiarVentures/ASN1.js , https://github.com/PeculiarVentures/xadesjs/ , https://github.com / PeculiarVentures / tl-create e https://github.com/PeculiarVentures/webcrypto-liner.

Também acabamos criando nossa própria biblioteca de PDF (embora usemos PDFjs para renderização) para que possamos criar os muitos tipos diferentes de assinaturas que o PDF permite. Esta biblioteca será eventualmente tornada pública, mas não está pronta para consumo público neste momento.

A fonte para o nosso visualizador não será tornada pública, mas com as bibliotecas acima, alguém pode reproduzir a verificação em seus próprios visualizadores. Temos um exemplo básico de como fazer isso aqui: https://pkijs.org/examples/PDFexample.html ele só precisa ser integrado aos seus visualizadores.

quando será mesclado com o pdf.js?

@Aarbel , neste ponto, não sei quando encontraremos tempo para refatorar o que temos para que possa ser facilmente mesclado, mas gostaríamos de ver a verificação se encontrando em PDFjs. Com isso dito, a equipe do PDFjs já expressou preocupação com o tamanho que esse recurso representaria devido às dependências necessárias. Enquanto isso for uma preocupação, não fará sentido gastar tempo de engenharia para fazer este trabalho.

IMHO, não implementá-lo antes do lançamento do Firefox 59 (ESR) significaria o fim do Firefox nas empresas se o Chrome ou o Edge pudessem ler assinaturas digitais.

@FrenchHope nem o cromo do firefox pode verificar assinaturas digitais.

Alguma atualização nesta funcionalidade?

@Snuffleupagus @yurydelendik @timvandermeij ? :)

Como expliquei em https://github.com/mozilla/pdf.js/pull/7702#pullrequestreview -4866355, o primeiro passo será criar uma API abstrata que permita integrar qualquer PKI / criptografia customizada com PDF.js.

@rmhrisk Não me importo com os usuários do Chrome. Preocupo-me com os usuários empresariais do Firefox. Muitos agora usarão o navegador Edge ou Internet Explorer se o Firefox não puder mais verificar as assinaturas digitais com o plugin Adobe Acrobat Reader.

Muitas empresas migram para o Windows 10 agora ...

Nem Edge ou IE.

@rmhrisk IE pode, com Adobe Acrobat Reader ActiveX.

editar: O Edge pode exibir a assinatura digital, mas não informa sobre a validade da assinatura como o Adobe Acrobat Reader faz.

ActiveX foi preterido e eventualmente não funcionará.

Edge Não bloqueia a assinatura digital, ele mostra a imagem em uma anotação, independentemente do status da assinatura.

Olá, qual é o status atual deste recurso?

Não está sendo trabalhado no momento, mas recentemente alguém mostrou interesse no código acima no IRC. A primeira etapa seria realmente https://github.com/mozilla/pdf.js/issues/1076#issuecomment -374244765.

Olá, você tem alguma data prevista como Dic 2018 ou talvez 2019 para lançar essa API?
Obrigado pelo visualizador de pdf a propósito, funciona excelente

Eu queria implementar a correção simples mencionada acima ... Comentando as seguintes linhas:

// Hide signatures because we cannot validate them.
          if (data.fieldType === 'Sig') {
              _this2.setFlags(AnnotationFlag.HIDDEN);
          }

No entanto, isso está causando um erro no console (de util.js: 418). Alguém sabe o que causa esse problema (além do fato de que a assinatura agora é exibida)?

Erro:

Uncaught (in promise) DOMException: Failed to execute 'postMessage' on 'DedicatedWorkerGlobalScope': function nonSerializableClosure() {
          return nonSerializable; // creating closure on some variable
        } could not be cloned.
    at eval (http://localhost:8888/src/shared/util.js:418:20)

@brianholle
Eu tentei e se você comentar

 if (data.fieldType === 'Sig') {
      warn('unimplemented annotation type: Widget signature');
     // this.setFlags(AnnotationFlag.HIDDEN);
    }

no pdf.worker.js construído, então funciona.

Seria bom fornecer pelo menos uma opção para isso. No nosso caso, por exemplo, já sabemos que a assinatura é válida, pois validamos as assinaturas antes.

Obrigado @strazovan e concordou. Eu criei um sinalizador que pode ser definido em default_preferences.json. Posso postar essas alterações se você estiver interessado!

@brianholle Olá, vou seguir seu exemplo. Anotado com este código, o cromo é exibido normalmente, mas a imagem assinada digitalmente no navegador IE obscurece o texto.

@hanxiaodao Você está dizendo que ao comentar o código de bloqueio:

 if (data.fieldType === 'Sig') {
      warn('unimplemented annotation type: Widget signature');
      // this.setFlags(AnnotationFlag.HIDDEN);
 }

Você tem problemas de exibição no IE?

@brianholle Obrigado pela sua resposta. Eu sigo seu exemplo, mas houve um problema no IE 11. O capítulo vermelho da assinatura digital obscurece o conteúdo do texto.
Este é o efeito do cromo.
chrome pic
Este é o efeito no IE11.
ie11_pic

Podemos obter alguma estimativa dos mantenedores se algum esforço for colocado na verificação de assinaturas?

Não é uma prioridade para nós agora, mas se alguém quiser contribuir com isso (veja os comentários acima para saber como deve ser implementado), estamos dispostos a integrar isso no PDF.js.

Também estamos interessados ​​em mostrar assinaturas digitais que não podem ser verificadas. Por favor, veja um exemplo em anexo.
Verpf-Erklärg-Bundesdatenschutz-Sig.pdf

quando eu comento:
if (data.fieldType === 'Sig') {
// this.setFlags (AnnotationFlag.HIDDEN);
}

erro:

message_handler.js:87 Uncaught (in promise) DOMException: Failed to execute 'postMessage' on 'DedicatedWorkerGlobalScope': #<DedicatedWorkerGlobalScope> could not be cloned.
    at eval (http://localhost:8888/src/shared/message_handler.js:87:21)

e por que não renderizar "div. annotationLayer"

Hahaa, eu conheço este ... está relacionado ao # 10350. Então você precisa comentar esta linha:
// this.setFlags (AnnotationFlag.HIDDEN);
e adicione esta linha depois disso:
data.fieldValue = null;

Como configurar o pdf ou pdf_viewer para habilitar o util.js que controla o switch exibido no selo? Existem algumas opções do AnnotationFlag no arquivo util.js, como INVISIBLE 0x01 、 HIDDEN 0x02. Eu modifico o AnnotionFlag em pdf.worker.js de HIDDEN para PRINT. Posso configurá-los sem esta maneira?

Deve ser um recurso muito bom. Esperançosamente, isso seria um recurso em breve!

Alguém conhece alguma solução alternativa confiável para isso? A edição de arquivos compilados pode funcionar apenas localmente ou para fins de teste, mas não mais do que isso.

O pdfjs é um projeto morto? Por que eles não implementam há tantos anos os recursos mais desejados ??

image

Quero conseguir isso, posso mostrar uma pequena notificação em algum lugar no PDF.js de que as assinaturas digitais não são validadas. Consigo funcionar no Chrome, mas não nos outros navegadores. Está longe de ser o melhor caso, mas realmente queremos mostrar essas assinaturas, mesmo que não sejam 100% validadas. Tentei alterar o código pdf.worker.js na parte em que this.setFlags (AnnotationFlag.HIDDEN); ficou. Eu adicionei uma construção "document.getElementbyId" onde mostro meu contêiner quando há uma ou mais assinaturas. Mas todos os navegadores (exceto o Chrome) não reconhecem o "documento". Existe uma opção para adicionar uma propriedade no documento ou algo assim, e usar isso no viewer.js? Existem mais construções com getElementbyId. Qualquer ajuda seria incrível.

Recentemente, envolvemos nosso visualizador que suporta verificação de assinatura em um componente da web e iframe; você pode descobrir mais sobre como usá-lo aqui: https://verify.ink/

rmhrisk isso é ótimo !!!

@brianholle Obrigado pela sua resposta. Eu sigo seu exemplo, mas houve um problema no IE 11. O capítulo vermelho da assinatura digital obscurece o conteúdo do texto.
Este é o efeito do cromo.
chrome pic
Este é o efeito no IE11.
ie11_pic
Tenho a mesma dúvida no IE, você resolveu isso?

Nossa organização é formada por mais de 2.000 pessoas. Todos eles estão usando o Chrome, não o Firefox, porque o Firefox não pode exibir as assinaturas de PDFs corretamente.
Acho que isso deve ser uma prioridade para a Mozilla.

@wolvz : Algum progresso do seu lado?

+1

+1

Recentemente, envolvemos nosso visualizador que suporta verificação de assinatura em um componente da web e iframe; você pode descobrir mais sobre como usá-lo aqui: https://verify.ink/

@rmhrisk
Ryan, você já pensou em abrir uma versão deste visualizador para a comunidade?

Implementamos uma solução de assinatura digital baseada em PKIjs e PDFjs que é capaz de verificar e criar assinaturas digitais. Você pode ver um exemplo disso vendo a lei de assinatura digital dos EUA aqui .

image

O visualizador atualmente confia nas CAs na lista de confiança do eIDAS, bem como nos emissores S / MIME confiáveis ​​da Mozilla.

Se você encontrar qualquer problema, envie-me um e-mail para [email protected] com arquivos de amostra, se houver.

@rmhrisk
Ryan, você já pensou em abrir uma versão deste visualizador para a comunidade?

@lexcorp fizemos https: /verify.ink para que você possa incorporar facilmente nosso visualizador como um componente da web.

Adicioná-lo é fácil:

<html>
  <body>
    <verify-viewer  url="https://verify.ink/assets/documents/electronic_records_and_signatures_in_commerce.pdf"  show-signature-if-present="true"  notify-if-not-signed="true"  sign="true"  download="true"></verify-viewer><script type="module" src="https://verify.ink/webcomponent/index.js"></script>
    </body>
</html>

Recentemente, adicionamos suporte para armazenamentos raiz personalizados também:
https://verify.ink/guides#root -certificates

Dos vários threads relacionados a assinaturas digitais, tive a impressão de que o principal motivo do progresso ausente é que ele não é capaz de verificar as assinaturas como pré-condição para exibi-las.

Faria sentido distinguir os dois casos de uso "Verificar assinatura" e "Exibir assinatura"?

Acho que há muitos casos de uso em que a exibição de assinaturas mesmo não verificadas (se necessário com um aviso adicionado pela equipe de projeto específica) é tudo o que é necessário e suficiente. Se isso já é possível com pequenas modificações no código, por que não é uma funcionalidade oficial que pode ser ativada ou desativada?

O problema de exibir a assinatura se for inválida é que você dá aos usuários a impressão de que é válida.

As assinaturas digitais, ao contrário de suas contrapartes úmidas sintéticas, têm como objetivo denotar a autenticidade de uma assinatura e a intenção associada a ela.

Ao exibir a imagem da assinatura sem validá-la, você está sugerindo ao usuário que ela é autêntica quando poderia ser apenas uma cópia de uma imagem.

Mas nem todas as assinaturas digitais válidas terão uma representação visual em um PDF, certo? PDF também permite assinar sem uma representação visual, tanto quanto eu sei.

O usuário da biblioteca não deveria decidir se seu aplicativo / caso de uso permite a exibição de assinaturas válidas / inválidas ou se medidas adicionais são necessárias, como avisos? Um caso de uso que tenho em mente é marcar regiões em PDFs enquanto considero também regiões de assinatura. Ainda pode ser de caráter informativo, embora outras ferramentas sejam necessárias para a validação final. Não vejo a desvantagem de oferecer a tela como um recurso opcional.

Mas nem todas as assinaturas digitais válidas terão uma representação visual em um PDF, certo? PDF também permite assinar sem uma representação visual, tanto quanto eu sei.

Ambas as afirmações estão corretas 1) nem todos os PDFs contêm uma representação visual (a maioria o faz). 2) O PDF permite uma assinatura ampla do documento. Nesse bug, entretanto, o que tenho visto é o interesse em mostrar a assinatura visual associada a uma assinatura digital e não uma assinatura ampla de documento.

Pode haver outro bug para arquivar para suporte a assinaturas de documentos que não tem representação visual, mas não me lembro de uma única solicitação para isso em qualquer um dos bugs relacionados a PDFjs que existem em assinaturas digitais.

O usuário da biblioteca não deveria decidir se seu aplicativo / caso de uso permite a exibição de assinaturas válidas / inválidas ou se medidas adicionais são necessárias, como avisos?
Pessoalmente, acredito que um desenvolvedor de aplicativo deve ser capaz de escolher fazer o que quiser com seu aplicativo.

No entanto, há também a questão de o que uma biblioteca como PDF.js deve escolher fazer também. Em minha opinião, expor uma opção que é insegura, facilmente mal compreendida e resultará em resultados de segurança ruins para o usuário final da biblioteca não é algo que os produtores de bibliotecas devam facilitar.

Imagine se este recurso estivesse completo, teria sido de grande ajuda durante esta quarentena do COVID-19, imagine quantas transações, contratos, etc.

Poderiam ter sido realizados a partir de casa, no entanto tenho testemunhado que esta funcionalidade está estagnada há anos, não sei porquê mas considero que em combinação com outras ferramentas pode ser de grande ajuda para trabalho colaborativo, home office, etc.

Eu concordo totalmente. As assinaturas digitais terão cada vez mais valor nos próximos anos. Meu caso de uso é uma ferramenta usada no desenvolvimento de dispositivos médicos. Sem as assinaturas digitais, nosso trabalho diário em casa seria muito mais difícil. Essa é a razão pela qual eu deixaria para o projeto usando a biblioteca encontrar uma compensação entre riscos e valor para o cliente ou tomar medidas adicionais que sejam apropriadas para seu caso de uso específico.

Também concordo totalmente que a assinatura digital é de fato um grande recurso ausente.

No entanto, há também a questão de o que uma biblioteca como PDF.js deve escolher fazer também. Em minha opinião, expor uma opção que é insegura, facilmente mal compreendida e resultará em resultados de segurança ruins para o usuário final da biblioteca não é algo que os produtores de bibliotecas devam facilitar.

A biblioteca é implementada por desenvolvedores, que devem estar cientes da segurança.
De minha parte, se eu tivesse o recurso, é claro que exibirei a assinatura, mas também verificarei e validarei a assinatura do lado do servidor para que eu possa mostrar um aviso se a assinatura não for válida.

@rmhrisk
Você planeja abrir o código para a comunidade? Porque não tenho um único caso em que eu poderia 1 / Permitir que os documentos fiquem disponíveis na Internet 2 / Permitir que terceiros acessem os documentos 3 / Permitir que terceiros injetem javascript no navegador do usuário.
Isso seria um ótimo complemento para pdfjs.

@rmhrisk
Você planeja abrir o código para a comunidade? Porque não tenho um único caso em que eu poderia 1 / Permitir que os documentos fiquem disponíveis na Internet 2 / Permitir que terceiros acessem os documentos 3 / Permitir que terceiros injetem javascript no navegador do usuário.
Isso seria um ótimo complemento para pdfjs.

Abrimos o código-fonte de todas as bibliotecas que usamos para criar nosso visualizador, e há muitas delas e muitas são bastante complicadas; Por exemplo, veja a peça PKIjs que lida com a validação do certificado para o visualizador. Também oferecemos licenças comerciais com suporte.

Não abriremos o código do visualizador, pois esse trabalho demandou uma quantidade significativa de tempo e investimento e esse tempo tem valor. Estamos felizes em apoiar outros no uso das bibliotecas de código aberto que criamos para tornar isso possível.

Re: 1; o visualizador não exige que os documentos estejam na internet.

Re: 2; o visualizador não exige que terceiros acessem os documentos.

Re: 3; é possível hospedar o componente da web para que você possa revisar e controlar as atualizações do componente.

Também concordo totalmente que a assinatura digital é de fato um grande recurso ausente.

No entanto, há também a questão de o que uma biblioteca como PDF.js deve escolher fazer também. Em minha opinião, expor uma opção que é insegura, facilmente mal compreendida e resultará em resultados de segurança ruins para o usuário final da biblioteca não é algo que os produtores de bibliotecas devam facilitar.

A biblioteca é implementada por desenvolvedores, que _devem_ estar cientes da segurança.
De minha parte, se eu tivesse o recurso, é claro que exibirei a assinatura, mas também verificarei e validarei a assinatura do lado do servidor para que eu possa mostrar um aviso se a assinatura não for válida.

"Deve ser" e "é" são duas coisas diferentes. Exibir a imagem da assinatura quando a assinatura é inválida ou não confiável é um ótimo exemplo do tipo de decisão que alguém pode tomar sem compreender totalmente as consequências.

Imagine se este recurso estivesse completo, teria sido de grande ajuda durante esta quarentena do COVID-19, imagine quantas transações, contratos, etc.

Poderiam ter sido realizados a partir de casa, no entanto tenho testemunhado que esta funcionalidade está estagnada há anos, não sei porquê mas considero que em combinação com outras ferramentas pode ser de grande ajuda para trabalho colaborativo, home office, etc.

Concordo totalmente que é por isso que criamos e abrimos o código-fonte de todas as bibliotecas que tornaram nosso visualizador possível. É também por isso que permitimos que as pessoas usem nosso visualizador gratuitamente.

Graças ao trabalho que fizemos, alguém certamente poderia recriar o trabalho do visualizador que fizemos com muito menos esforço e enviar os PRs associados ao PDFjs, ficaríamos até mesmo felizes em revisar o código desses PRs.

Preciso exibir PDFs em meu aplicativo Angular CLI, em um contexto onde a validade da assinatura não é relevante e a única parte importante é ter uma exibição precisa.
Meu caso de teste foi o pdf de amostra com uma assinatura digital da Adobe.
Como já tentei muitas respostas, condensarei os resultados de minhas pesquisas a seguir.

A resposta mais comum que tenho visto é comentar as seguintes linhas em pdf.worker.js (linhas 48353 a 48355):

if (data.fieldType === 'Sig') {
      //this.setFlags(AnnotationFlag.HIDDEN);
 }

Isso, no entanto, não funcionou.

Comentar as seguintes linhas em annotation.js diretamente no pdfjs-dist também não funcionou (linhas 285 a 287):

case 0:
        this.color = null;
        break;

Isso também não funcionou, embora eu não soubesse como colocar a linha de código fornecida:
(<any>window).pdfWorkerSrc = '<path_to_file>/pdf.worker.js';

Tentei pelo menos obter as anotações na página , mas cada página retornou uma matriz vazia:

page.getAnnotations().then(function(annotations) {
     console.log('annotations loaded');
     console.log(annotations);
     for (let i = 0; i < annotations.length; i++) {
          console.log(annotations[i].subtype);
      }
 }, function (reason) {
     console.log(reason);
}); 

É importante que meu aplicativo exiba o pdf como está. No mínimo, gostaria de poder fazer com que os retângulos delimitadores da assinatura exibissem um espaço reservado em seu lugar.
Alguém poderia me ajudar?

Preciso exibir PDFs em meu aplicativo Angular CLI, em um contexto onde a validade da assinatura não é relevante e a única parte importante é ter uma exibição precisa.
Meu caso de teste foi o pdf de amostra com uma assinatura digital da Adobe.
Como já tentei muitas respostas, condensarei os resultados de minhas pesquisas a seguir.

Olá, acho que você quase conseguiu na primeira tentativa ... você já tentou https://github.com/mozilla/pdf.js/issues/1076#issuecomment -446959325?

Acabei de experimentar: nada mudou.
Alguma outra ideia?

Esta questão já está aberta há algum tempo. Qual é o plano atual para enfrentá-la e como podemos ajudar?

Se eu não conseguir exibir a assinatura, no mínimo, gostaria de exibir um retângulo de espaço reservado onde deveria estar.
(Simplesmente sabendo as coordenadas x, y, bem como a largura e o comprimento da assinatura)

Claro, exibir a assinatura ainda seria o melhor cenário (mais uma vez, não preciso verificar isso no meu caso de uso específico).

Seria uma opção adicionar uma opção de renderização para exibir as assinaturas não verificadas?
Desta forma, os usuários do pdf.js podem decidir se desejam correr o risco de exibi-los ou não.

Exibir uma assinatura criptográfica invalidada é tão ruim quanto exibir uma que foi validada incorretamente:
https://www.pdf-insecurity.org/

E se a assinatura foi validada corretamente antes por, digamos, um serviço de back-end?
Isso significaria que a assinatura estava OK, mas ainda não poderia ser exibida em um aplicativo cliente.

Uma opção de renderização para exibir a assinatura ou não permitiria aos usuários do pdf.js validar a assinatura de alguma forma e então decidir por conta própria exibi-la ou não.
Isso também removeria a carga dos desenvolvedores de pdf.js de fornecer verificação de assinatura, já que isso provavelmente não deve fazer parte da biblioteca de renderização de pdf.
Não exibir estritamente a assinatura limita os casos de uso do pdf.js.

E se a assinatura foi validada corretamente antes por, digamos, um serviço de back-end?
Isso significaria que a assinatura estava OK, mas ainda não poderia ser exibida em um aplicativo cliente.

Uma opção de renderização para exibir a assinatura ou não permitiria aos usuários do pdf.js validar a assinatura de alguma forma e então decidir por conta própria exibi-la ou não.
Isso também removeria a carga dos desenvolvedores de pdf.js de fornecer verificação de assinatura, já que isso provavelmente não deve fazer parte da biblioteca de renderização de pdf.
Não exibir estritamente a assinatura limita os casos de uso do pdf.js.

Fazer a validação entre o servidor e o cliente está bom. Expor uma bandeira para exibir a assinatura como válida e validada seria uma arma de fogo.

Fazer a validação entre o servidor e o cliente está bom. Expor uma bandeira para exibir a assinatura como válida e validada seria uma arma de fogo.

Estamos lidando com assinaturas verificadas, mas não podemos exibi-las (sem hacking) no navegador do cliente usando pdf.js
Então, que outra opção de renderizar PDFs no navegador do cliente você sugeriria para renderizar a representação visual da assinatura verificada?

Você pode corrigir seus PDFjs antes da implantação para ter o comportamento de que precisa?

Isso é o que eu quis dizer com "hackear" e é exatamente o que somos atualmente forçados a fazer :-(

Não vejo por que ainda estamos fazendo perguntas sobre o problema em si: os "hacks" nem funcionaram para mim, e ainda estou precisando.

No meu caso de uso, a validade das assinaturas não está em questão. No entanto, preciso exibi-los ou, pelo menos, informar ao usuário que há "algo ali" em vez de apenas aquela parte em branco da tela.
Não me importo se a API vem com um grande parágrafo de aviso vermelho sobre assinaturas não verificadas ou se me força legalmente a dizer que não pode ser verificada, ou se me avisa que é por minha própria conta e risco.
... só preciso exibir a assinatura.

No mínimo, eu realmente gostaria de ter a posição e o tamanho das assinaturas no documento, para que eu pudesse exibir uma caixa cinza em seu lugar com "ei, usuário, deveria haver uma assinatura lá" escrita neles.

Atualmente, o usuário não tem como saber se o documento está assinado neste local.
Não é uma maneira ainda pior de temperar?

Se houvesse um booleano que permitisse exibir todas as assinaturas digitais do documento como caixas de modelo cinza transparentes, isso seria bastante satisfatório e esse recurso não levantaria nenhum problema de ética / segurança.

(Eu também gostaria de dizer que o problema está aparentemente pendente desde 2012, com mais de uma centena de comentários, somente neste tópico. Não acho que seja o único esperando por esse recurso)

As caixas cinzas pareceriam um erro de renderização e muito provavelmente sobrecarregariam uma linha direta de suporte fornecida :-)
Temos um hack funcionando, que funciona bem por enquanto, mas é reconhecidamente muito feio:

  1. Baixe a versão atual, transpilada e reduzida do pdfjs-dist
  2. Corrija as linhas em questão na versão transpilada.
  3. Libere como novo pacote privado para o npm-repo interno.
  4. Use o pacote corrigido em vez do pacote original pdfjs-dist.

Ugliy certo? Mas funciona e renderiza as assinaturas incorporadas perfeitamente.

As caixas cinzas pareceriam um erro de renderização e muito provavelmente sobrecarregariam uma linha direta de suporte fornecida :-)

Sim, sim, sim, quis dizer que qualquer modelo / imagem / mensagem que pudesse ser complementado por * o pdf contém assinaturas digitais que não puderam ser verificadas e, como tal, não foram exibidas. Qualquer coisa que possa ser entendida pelo usuário se uma mensagem o explicasse.

  1. Corrija as linhas em questão na versão transpilada.

Atualmente estou usando o Angular CLI com pdfjs-dist instalado em meus node_modules, mas qualquer solução que escrevi alguns posts atrás não funcionou do meu lado, e nem isso:

Olá, acho que você quase teve na primeira tentativa ... você já tentou este # 1076 (comentário) ?

Perdi algo ou meu caso é muito específico para essa correção?

Seguimos a explicação neste tópico.
https://github.com/mozilla/pdf.js/issues/4743#issuecomment -163953288

Basicamente, mudamos esta parte:

// Hide unsupported Widget signatures.
if (data.fieldType === 'Sig') {
   warn('unimplemented annotation type: Widget signature');
   this.setFlags(AnnotationFlag.HIDDEN);
}

Para isso:

// Hide unsupported Widget signatures.
if (data.fieldType === 'Sig') {
   warn('unimplemented annotation type: Widget signature');
}

Eu sei que você poderia remover todo o 'if', mas queríamos o menor patch possível.

Caramba. Essa é realmente a correção que não funcionou do meu lado.
Vou tentar novamente quando voltar ao pdf exibindo parte do meu aplicativo.
Eu não criei meu próprio pacote ainda, mas alterar o arquivo diretamente em node_modules / pdfjs-dist não mudou nada da última vez que tentei.

Você alterou os dois arquivos pdf.worker.js e pdf.worker.min.js
Isso foi necessário em nossa abordagem.

Você alterou os dois arquivos pdf.worker.js e pdf.worker.min.js
Isso foi necessário em nossa abordagem.

Você levantou um ponto excelente que eu posso ter esquecido!
Vou tentar fazer isso rapidamente hoje e ver se funciona.

Olá, gosto da sua abordagem, mas infelizmente não funcionou para mim
Eu mudei as linhas assim:

Seguimos a explicação neste tópico.
# 4743 (comentário)

Basicamente, mudamos esta parte:

// Hide unsupported Widget signatures.
if (data.fieldType === 'Sig') {
   warn('unimplemented annotation type: Widget signature');
   this.setFlags(AnnotationFlag.HIDDEN);
}

Para isso:

// Hide unsupported Widget signatures.
if (data.fieldType === 'Sig') {
   warn('unimplemented annotation type: Widget signature');
}

Eu sei que você poderia remover todo o 'if', mas queríamos o menor patch possível.

Então eu o construí com gulp generic e usei os recursos construídos.

Você alterou os dois arquivos pdf.worker.js e pdf.worker.min.js
Isso foi necessário em nossa abordagem.

O pdf.worker.js foi construído, mas você mencionou pdf.worker.min.js , como é construído e onde está armazenado?
o que estou perdendo?

Muito obrigado antecipadamente

@ ll-priva Não criamos o pdf.js sozinhos.
Como eu disse no comentário https://github.com/mozilla/pdf.js/issues/1076#issuecomment -658601553, na verdade baixamos a versão já construída de pdfjs-dist e corrigimos as versões empacotadas de pdf.worker.js e pdf.worker.min.js .

Minha explicação em https://github.com/mozilla/pdf.js/issues/1076#issuecomment -658609803 provavelmente foi um pouco obscura, desculpe.
Implementamos a solução descrita corrigindo o pacote pré-construído https://www.npmjs.com/package/pdfjs-dist.
Em seguida, usamos essas versões corrigidas de pdf.worker.js e pdf.worker.min.js para enviar um pacote privado pdfjs-dist para nosso repositório interno npm.
Por último, mas não menos importante, usamos esta versão corrigida em nosso código de produção em vez do pacote oficial pdfjs-dist .

Espero que isso torne nossa abordagem um pouco mais clara.

@PSpSynedra Muito obrigado. Isso funcionou para mim também

Estou de volta nesta tarefa pela primeira vez em algumas semanas, mas ainda não funciona do meu lado.
Eu não fiz meu próprio pacote privado no momento: contanto que eu não tenha reconstruído, modificar diretamente os arquivos em node_modulespdfjs-dist deveria ter funcionado (localmente, então eu teria que realmente importar o pdf.js modificado como um ativo ou pacote).

Pesquisar "Sig" na pasta fornece 4 resultados de arquivo diferentes:

  • pdfjs-dist \ buildpdf.worker.js
  • pdfjs-dist \ buildpdf.worker.min.js
  • pdfjs-dist \ es5 \ buildpdf.worker.js
  • pdfjs-dist \ lib \ core \ annotation.js

Editei todas essas 4 ocorrências para remover o conteúdo do "se" que limpou o campo de assinatura e defini um sinalizador para ocultá-lo, conforme mencionado acima.
Nada diferente aconteceu: getAnnotations () retorna um array vazio, e as assinaturas existentes ainda não são exibidas.

Eu ainda recebo esta mensagem no console, que não é nem mesmo um erro ou aviso (pdf.worker.js: 2965: 14):

Aviso: tipo de campo de widget não implementado "Sig", voltando ao tipo de campo base.

Olhando para o código, isso significa que annotation.js o envolve em uma WidgetAnnotation "base", o que significa que a mensagem não parece ser um problema, apenas os sinalizadores que removi.

Estou esquecendo de algo? Eu editei o arquivo min.js assim como o arquivo js, ​​que estão na pasta build e como tais deveriam ser os usados, então tudo deveria ter funcionado ...
O que exatamente você fez @ll-priva e @PSpSynedra ?

@Epsiom foi isso que acabei de fazer e funcionou para mim em cerca de 5 minutos: https://github.com/mozilla/pdf.js/issues/1076#issuecomment -446959325

Você precisa comentar this.setFlags(AnnotationFlag.HIDDEN); e adicionar data.fieldValue=null . O único arquivo que modifiquei foi pdf.worker.js , que no nosso caso é da biblioteca pdfjs-dist, então já está minimizado

@Epsiom e outros que podem acabar aqui.
Eu tive o mesmo problema, editei arquivos de trabalho em PDF e nenhum resultado.

No meu caso, estou usando https://github.com/VadimDez/ng2-pdf-viewer para exibir PDF em um aplicativo angular. Este módulo carregava diretamente o trabalhador pdf do cloudflare, não o arquivo local. Portanto, verifique se o aplicativo da web está realmente usando o arquivo pdf.worker.js modificado. Você pode verificar clicando no campo do widget não implementado, digite o aviso "Sig" no console e mova o mouse até o nome do arquivo.

@konum O aviso é de " http: // localhost : 4200 / assets / vendor / pdf.worker.js", mas eu já comentei as duas linhas deste arquivo como disse antes:
if (data.fieldType === 'Sig') { //this.setFlags(AnnotationFlag.HIDDEN); //data.fieldValue = null; }

Ainda sem assinatura digital à vista ...

@Epsiom Não funcionou para mim também. Ainda estou olhando para isso.

@Epsiom Gerenciado para obter a assinatura para visualização. Em pdf.worker.js, adicione isso na linha 18480
case "Sig":
retornar novo SquareAnnotation (parâmetros);

O switch está logo acima desta linha.
(0, _util.warn) ('Tipo de campo de widget não implementado "' + fieldType + '",' + "voltando ao tipo de campo base.");

@konum não funcionou para mim:
ERROR Error: Uncaught (in promise): Object: {"message":"SquareAnnotation is not defined","stack":"AnnotationFactory_create<strong i="7">@http</strong>://localhost:4200/assets/vendor/pdf.worker.js:47999:7\nget annotations<strong i="8">@http</strong>://localhost:4200/assets/vendor/pdf.worker.js:48877:43\nLocalPdfManager_ensure/<<strong i="9">@http</strong>://localhost:4200/assets/vendor/pdf.worker.js:49204:21\nLocalPdfManager_ensure<strong i="10">@http</strong>://localhost:4200/assets/vendor/pdf.worker.js:49202:14\nPage_getOperatorList<strong i="11">@http</strong>://localhost:4200/assets/vendor/pdf.worker.js:48815:43\nwphSetupRenderPage/<<strong i="12">@http</strong>://localhost:4200/assets/vendor/pdf.worker.js:49883:13\n"} AnnotationFactory_create<strong i="13">@http</strong>://localhost:4200/assets/vendor/pdf.worker.js:47999:7 get annotations<strong i="14">@http</strong>://localhost:4200/assets/vendor/pdf.worker.js:48877:43 LocalPdfManager_ensure/<<strong i="15">@http</strong>://localhost:4200/assets/vendor/pdf.worker.js:49204:21 LocalPdfManager_ensure<strong i="16">@http</strong>://localhost:4200/assets/vendor/pdf.worker.js:49202:14 Page_getOperatorList<strong i="17">@http</strong>://localhost:4200/assets/vendor/pdf.worker.js:48815:43 wphSetupRenderPage/<<strong i="18">@http</strong>://localhost:4200/assets/vendor/pdf.worker.js:49883:13

@Epsiom Você está usando a versão mais recente do pdf.js? em pdf.worker.js deve haver uma classe SquareAnnotation definida.

@Epsiom apenas para esclarecer, apenas this.setFlags(AnnotationFlag.HIDDEN); devem ser comentados. data.fieldValue = null; deve ser adicionado se não estiver presente, mas NÃO deve ser comentado.

Também estamos usando o pacote pdfjs-dist, então o modificamos diretamente, conforme um comentário anterior. Você tem certeza de que o código que está modificando está realmente sendo executado? Se estiver em node_modules, dependendo de sua construção, alguns desses ativos podem ser armazenados em cache e você pode não estar realmente usando seu código modificado.

@kjhangiani Lembro-me claramente de ter qualquer console.log adicionado aparecendo no console, então é claramente executado.
Vou tentar adicionar data.fieldValue = null; quando voltar a esta tarefa e ver se funciona.

Adicionando data.fieldValue = null; volta no bloco if (data.fieldType === 'Sig') , bem como console.log("TEST") apenas para garantir, e nada aconteceu, enquanto "TEST" apareceu corretamente no console, após o Warning: Unimplemented widget field type "Sig", falling back to base field type. usual

Alguma outra ideia?

@Epsiom Gerenciado para obter a assinatura para visualização. Em pdf.worker.js, adicione isso na linha 18480
case "Sig":
retornar novo SquareAnnotation (parâmetros);

O switch está logo acima desta linha.
(0, _util.warn) ('Tipo de campo de widget não implementado "' + fieldType + '",' + "voltando ao tipo de campo base.");

Isso funcionou para mim, você salvou meu dia, obrigado.

@yduybya Quão recente é o seu projeto?
Existe alguma particularidade nisso?
Acho que preciso atualizar minha versão do pdf.js e tentar novamente, embora seja muito recente.

Existe alguma maneira fácil de atualizar pdf.js em um aplicativo Angular 9?
Encontrei o novo pdf.worker.js aqui (http://mozilla.github.io/pdf.js/build/pdf.worker.js), mas apenas substituir esse arquivo não funcionou (obviamente).

Rastreei meu projeto de volta a https://github.com/mozilla/pdf.js/issues/8836 e https://github.com/ashishyadav0019/pdfJS_angular4_Ts.git , mas esses projetos estão usando arquivos desatualizados.

Os arquivos no github pdf.js e no pdfJS_angular4_Ts.git não estão correlacionados.
Alguém sabe como importar corretamente pdf.js em um projeto Angular 9, com arquivos atualizados?

@Epsiom para o aplicativo Angular 8) Acho que deve funcionar no angular 9) Estou usando https://github.com/VadimDez/ng2-pdf-viewer.

Dos documentos do ng2-pdf-viewer:
Por padrão, o trabalhador é carregado de cdnjs.cloudflare.com.
Em seu caminho de atualização de código para o trabalhador, por exemplo, /pdf.worker.js
(janela como qualquer outra) .pdfWorkerSrc = '/pdf.worker.js';
Isso deve ser definido antes que o componente do visualizador de pdf seja renderizado.

Usar este projeto adicionará a dependência pdfjs-dist ao seu projeto. Edite node_modules / pdfjs-dist / build / pdf.worker.js com a dica squareAnnotation.

@konum Estou usando o pdf.js diretamente e não o ng2-pdf-viewer por vários motivos, ao me inspirar nisso: https://github.com/ashishyadav0019/pdfJS_angular4_Ts.git
Eu tenho a dependência pdfjs-dist, mas é o src/assets/vendor/pdf.worker.js que é usado.
Qualquer ideia ?

@Epsiom Você tentou atualizar os arquivos pdf.js e pdf.worker.js para o código mais recente?

@konum Isso é precisamente o que estou tentando fazer, mas como o pdf.js raramente é usado no Angular, já que a maioria dos projetos aparentemente só precisa do ng2-pdf-viewer e os arquivos usados ​​na última versão do pdf.js são diferentes , o processo de fazer isso está longe de ser óbvio à primeira vista.

Olá,

Comentando this.setFlags (AnnotationFlag.HIDDEN); em pdf.worker.js em v2.6.347 não mostra a imagem da assinatura.

Houve uma mudança nisso?

@lainosantos Sim, há uma mudança. Se você desativar a renderização do formulário, as assinaturas serão mostradas novamente.

@stephanrauh Obrigado.

PDFViewerApplicationOptions.set('renderInteractiveForms', false);

Existe uma maneira de habilitar formulários e mostrar assinaturas?

@lainosantos Não, mas encontrei um bom renderInteractiveForms está desabilitado. Ele usa Angular, mas acho que você pode extrair a ideia mesmo se estiver usando uma estrutura diferente: https://medium.com/factory-mind/angular-pdf-forms-fa72b15c3fbd

Tenho assuntos mais urgentes no momento e não posso gastar tempo com a tarefa, mas se alguém conseguir importar uma versão pdf.js atualizada no Angular 9, ele receberá meu mais profundo agradecimento.

@Epsiom Aqui está: https://www.npmjs.com/package/ngx-extended-pdf-viewer :)

@stephanrauh ... Bem, exceto que eu preciso ser compatível com o IE11 e só usar o canvas diretamente para ter um visualizador de PDF personalizado, então não posso usar isso, infelizmente.
Eu também não posso usar o ng2-pdf-viewer, ou qualquer coisa do tipo, estou realmente perguntando sobre o pdf.js em si, que é realmente um caso de nicho.

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

Questões relacionadas

AlexP3 picture AlexP3  ·  3Comentários

PeterNerlich picture PeterNerlich  ·  3Comentários

THausherr picture THausherr  ·  3Comentários

xingxiaoyiyio picture xingxiaoyiyio  ·  3Comentários

jigskpatel picture jigskpatel  ·  3Comentários