Pdf.js: Firmas digitales en pdf.js

Creado en 13 ene. 2012  ·  174Comentarios  ·  Fuente: mozilla/pdf.js

¡Hola! Nos interesa saber cuándo o si vas a implementar la Vista de datos de firma (Xades, Pades & Cades) en el visor de PDF (PDF.js)

Saludos cordiales

Alejandro Pinedo,
SOA-X

2-feature 4-annotations

Comentario más útil

Para todas las personas anteriores, hagan uso del nuevo botón de reacción +1 de GitHub en lugar de agregar comentarios aquí.

Todos 174 comentarios

Actualmente no hay planes inminentes para implementar esta función. No lo hemos visto surgir mucho, por lo que no ha sido una prioridad. Sin embargo, siempre estamos buscando más colaboradores, por lo que agradeceríamos cualquier parche para agregar esta función. Si está interesado en agregarlo, no dude en pasar por nuestro canal de IRC (#pdfjs irc.mozilla.org) si tiene preguntas.

Brendan

Hola

¿Cuál es el estado actual de la implementación de esta función?

Gracias

@ fermo111 Aún no se ha implementado, pero estaré encantado de

@yurydelendik Estoy interesado en implementar la función de presentar firmas digitales de archivos PDF en pdf.js. ¿Cómo puedo contactarte?

@wolvz, por favor encuéntrame en el canal de IRC irc.mozilla.org #pdfjs (que es más simple) o únete a cualquiera de nuestras reuniones públicas para coordinar cosas.

Estoy tratando de implementar SigWidgetAnnotation (como TextAnnotation, LinkAnnotation), en annotation.js, para admitir firmas digitales en pdf.js.
La firma aparece en el visor de PDF y ya puedo extraer y verificar los certificados incrustados en el objeto PKCS7 codificado en DER ...
Ahora paso al siguiente paso, que es verificar el resumen del mensaje del archivo.
Para eso, necesito tener acceso al contenido del archivo ... No sé si es posible o no tener acceso a eso desde annotation.js, pero no puedo resolverlo. Lo mejor que pude hacer fue obtener el contenido en core.js usando:

var contentStreamPromise = this.pdfManager.ensure (esto, 'getContentStream', []);
var dataPromises = Promise.all ([contentStreamPromise]);
dataPromises.then (función (datos) {
var contentStream = data [0];
var contenido = contentStream.str.bytes;
devolver contenido;
});

¿Alguien puede aclararme cuál es la mejor manera de obtener el contenido del archivo en annotation.js?
Gracias por adelantado...

wolvz,
¿Algún progreso en este sentido?

@yurydelendik @wolvz
Estoy muy interesado en la función de visualización de firma digital. Cloné el repositorio de wolvz y construí el código, pero cuando intento usarlo, recibo un rechazo de promesa con este error: "require no está definido". ¿Alguien podría explicar qué causaría ese error y cómo podría solucionarlo? Además, estoy muy dispuesto a seguir trabajando en esta función. He trabajado con archivos PDF en Java a través de la biblioteca iText, pero trabajar con ellos en javascript es algo que nunca antes había probado. ¿Alguien podría dirigirme a alguna documentación / tutorial que podría hacerme señalar en la dirección correcta para que pueda averiguar por dónde empezar mientras trato de mover esta función más abajo en el campo?

Estoy confundido. Lo que tengo que hacer en mi biblioteca pdf.js para mostrar la firma digital pdf en pdfJS

untitled

Esta firma y el certificado se muestran en pdf ... pero cuando lo abro en pdf.js no se muestran allí.

@ mrpandya007 , la firma digital no se muestra porque los desarrolladores optaron por ocultarla hasta que tengan la función de verificación de firma funcionando.
Si mal no recuerdo, si desea que simplemente aparezcan, debe comentar las líneas 389 a 392 aquí: https://github.com/mozilla/pdf.js/blob/master/src/core/annotation.js#L389
Sin embargo, no estoy seguro y no puedo probarlo en este momento.

@wolvz , Gracias por la respuesta pero ya está comentada. Por favor, mire esto, la firma PDF generada por el informe de Crystal no se muestra, pero el pdf generado por DevExpress lo muestra correctamente

Por favor contéstame .... lo que tengo que hacer .. te puedo dar ese pdf para que pruebes

Todavía no hay un buen soporte para firmas digitales, por lo que será necesario implementarlo.

Cuántos días llevará solucionar este problema de firma digital porque dependemos de su lib.

Puede llevar mucho tiempo ya que esta función tendrá que ser desarrollada por alguien y actualmente existen problemas de mayor prioridad.

heading

Por qué me enfrento al problema de "=" iniciar sesión en los títulos, solo en pdf.js, después de descargar el archivo, desapareció.
cualquier solución por favor. Ocurre solo en pdf generado por telerik.

@ mrpandya007 No publique problemas no relacionados dentro de otros problemas. Abra una edición separada para ese problema.

También encontré el mismo problema. Si bien no necesito necesariamente la validación de la firma, en mi caso sería suficiente con solo mostrar la imagen de la firma. Tal vez hasta que se implemente la validación de la firma en lugar de no mostrar la imagen, sería mejor mostrar la imagen y anotarla con un pequeño texto que diga algo como "Validación de firma no implementada. Estado de la firma desconocido"? Entonces, al menos visualmente, el pdf mostraría lo que cabría esperar.

¿Existe un cronograma de cuándo se abordará este problema? ¿O deberíamos considerar otro producto?
pdfjsissue

Hasta donde yo sé, nadie está trabajando en esto, así que si alguien está dispuesto a trabajar en esto, no dude en enviar un PR.

Hola,
Una versión PDF.JS que solo puede mostrar campos de firmas digitales debería ser suficiente para muchos usuarios ... ¿Hay algún "fork" que pueda hacer esto?
Saludos

@DORNINEM solo necesitas comentar el fragmento de código que oculta las anotaciones de la firma.
Pero de todos modos, aquí está la bifurcación que solicitó: https://github.com/wolvz/pdf.js

@wolvz !! Muchas gracias.
Me pregunto por qué esta función no está en la versión oficial, ya que funciona muy bien. Probé con algunos de mis archivos PDF firmados (de 1 a 6 campos de firma diferentes) y el resultado es perfecto.
Estoy realmente seguro de que la verdadera necesidad es mostrar estos campos, no validar la firma. La validación de firmas se realiza mejor en el lado del servidor, ya que algunas veces requieren certificados que no están instalados en un depósito de certificados local.

Hola,

¿Alguien puede explicar qué línea tenemos que comentar o descomentar para permitir que pdf.js muestre la firma digital?

Gracias por toda la información :)

@maximlefebvre Según https://github.com/wolvz/pdf.js/commit/7df3f4fe6e21b888358fd7718cb15e3c266ba066 , eso debería ser suficiente para permitir que PDF.js muestre la firma. Sin embargo, tenga en cuenta que esto no ha sido verificado por el equipo de PDF.js como una solución estable (de ahí la razón por la que aún no está en la base de código oficial), pero podría funcionar como una solución temporal.

Estamos interesados ​​en implementar la verificación de firmas. Parece que @wolvz comenzó a trabajar en esto, pero no lo completó. ¿Tiene algún código parcial sobre el que podamos trabajar?

@wolvz , ¿puede ayudarnos haciendo una pequeña nota para comprender su repositorio? No puedo entender cómo comenzar a verificar su código. Estamos tratando de implementar la firma y es posible que podamos completar su proyecto y ayudar a la comunidad.

Hemos implementado tanto la firma como la verificación de la firma de los PDF en el navegador usando https: // pkijs , puede ver una demostración de verificación de firma temprana aquí: https://pkijs.org/examples/PDFexample.html aún no nos hemos integrado con PDFjs, pero hará eso en un futuro no muy lejano. Nuestra intención es publicar la mayor parte de esto como OSS y devolver cualquier cambio a PDFjs que sea necesario para que la integración sea fluida.

Impresionante, gracias @rmhrisk! Sin embargo, no estoy seguro de cómo crear un archivo de paquete de CA. ¿Tiene detalles sobre cómo hacerlo? Me imagino que cuando esto está integrado con pdf.js sería más "plug and play" cuando viene con Adobe Root CA de forma predeterminada y puede verificar la cadena de certificados, ¿verdad? ¿Y tiene un cronograma esperado para la integración de pdf.js? ¡Su trabajo es muy apreciado!

Hay uno aquí: http://curl.haxx.se/ca/cacert.pem y otro registrado en el repositorio en muestras.

Hay una herramienta para crear una aquí: https://github.com/PeculiarVentures/tl-create

No puedo compartir una ETA en este momento, tenemos recursos limitados y esto es importante para nosotros, pero primero debemos terminar algunas partes más complejas.

Probé el que vinculó, así como algunos certificados que intenté extraer del PDF usando Adobe Reader, pero siempre aparece el error "TypeError: No se puede leer la propiedad 'signature_time_stamp' de undefined" (en Safari / Chrome estable / Chrome canario).

Tengo algo de tiempo la semana que viene, así que avíseme si puedo ayudar con la fusión en pdf.js de alguna manera.

Esa muestra solo admite firmas básicas, sin marcas de tiempo ni LTV en este momento. No dude en enviarme un ping a rmh en unmitigatedrisk dot com

Ah, ya veo. Como referencia, finalmente lo hice funcionar en Chrome / Firefox (pero no Safari, que aparentemente solo admite este paquete CA y este archivo PDF .

Sí, eso también, no solo es el problema prefijado, sino que también solo admiten suficiente webcrypto para manejar casos de drm de netflix. Por ejemplo, ¿no le permiten exportar la clave pública para un par de claves que genera? Este es un buen recurso para verificar la compatibilidad del navegador: https://diafygi.github.io/webcrypto-examples/

@viveksjain ¿Puedes confirmar cómo lo hiciste funcionar en Chrome / Firefox?

Intenté usar el complemento de desarrollo en Firefox, sin embargo, parece que todavía no muestra las firmas.
http://mozilla.github.io/pdf.js/extensions/firefox/pdf.js.xpi

@complience obtuvo el código de muestra ubicado en https://pkijs.org/examples/PDFexample.html que no funciona en PDFjs

Hola @complience , tengo una prueba de concepto trabajando en https://github.com/viveksjain/pdf.js/tree/sig-verify-support. Puedes probarlo usando git clone --recursive https://github.com/viveksjain/pdf.js.git . Con un poco más de trabajo, debería estar listo para una solicitud de extracción en este repositorio, pero todavía no he tenido tiempo.

@viveksjain ¡agradable! ¿Qué se necesita todavía antes de que esté listo para una solicitud de extracción?

+1 Encantado de obtener esta funcionalidad.

Sí, esto será un gran valor agregado para la comunidad, abriendo la puerta a muchos casos de uso. ¡¡Gracias!!

+1 para esta funcionalidad

+1 para esta funcionalidad

Para todas las personas anteriores, hagan uso del nuevo botón de reacción +1 de GitHub en lugar de agregar comentarios aquí.

+ 1 para esta funcionalidad

👍 + 1 para esta funcionalidad

Nuevamente, use el botón de reacción de GitHub en el comentario superior para votar esta funcionalidad, lo que nos ayudará a priorizar el problema. Agregar comentarios "+1" genera notificaciones innecesarias para los desarrolladores.

"TypeError: No se puede leer la propiedad 'signature_time_stamp' de undefined" usando la rama de @viveksjain

+1. ¡Esperando esta función! ...

¿Cuándo estará disponible esta funcionalidad? ¿Qué pasó con el progreso de viveksjain?

@complience Hola, tengo una prueba de concepto trabajando en https://github.com/viveksjain/pdf.js/tree/sig-verify-support. Puedes probarlo usando git clone --recursive https://github.com/viveksjain/pdf.js.git. Con un poco más de trabajo, debería estar listo para una solicitud de extracción en este repositorio, pero todavía no he tenido tiempo.

@lexcorp Desafortunadamente, esto se convirtió en una prioridad menor para mí después de mi mensaje anterior. Veré si puedo hacerlo, pero no voy a hacer ninguna promesa que no pueda cumplir ...

Estoy intentando compilar esta versión: https://github.com/viveksjain/pdf.js/tree/sig-verify-support
Cuando entro el comando: node make generic
Recibo el mensaje: ### Obteniendo el número de compilación de la extensión
Y el proceso de compilación no se realiza

¿Cómo puedo resolver este error?
Estoy haciendo algo mal?
¿Por qué no terminar la compilación?

@lexcorp Si todavía hay algún interés, al menos mi versión está lo suficientemente actualizada para compilar. : +1:

Hola Vivek, si sigo interesado, gracias ...

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

@lexcorp https://github.com/lexcorp Si todavía hay algún interés, en
al menos mi versión está lo suficientemente actualizada para compilar. 👍

-
Estás recibiendo esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/mozilla/pdf.js/issues/1076#issuecomment-266518165 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AFfB-LbmIVIrJLnxwJlm8aDITDKh5tWLks5rHZi5gaJpZM4BlvMP
.

Hola Gustavo, gracias ...

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

@lexcorp https://github.com/lexcorp Si todavía hay algún interés, en
al menos mi versión está lo suficientemente actualizada para compilar. 👍

-
Estás recibiendo esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/mozilla/pdf.js/issues/1076#issuecomment-266518165 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AFfB-LbmIVIrJLnxwJlm8aDITDKh5tWLks5rHZi5gaJpZM4BlvMP
.

¿Existe algún problema por el cual el soporte para firmas digitales no se incluye en pdf.js?

Siga la discusión en # 7702.

Estoy interesado en escuchar a las personas sobre sus casos de uso para la verificación de firmas en PDFjs. Envíeme un correo electrónico a ryan at peculiarventures.com con su caso de uso.

También me interesaría escuchar sus casos de uso para iniciar sesión en PDFjs, si le importa ese escenario, también me gustaría escuchar su caso de uso.

La rama sig-verify-support de pdf.js no es compatible con IE y firefox perfectamente porque WebCrypto no se puede obtener, ¿alguna idea para lidiar con eso?

Hola amigos, ¿ya funciona la verificación de firma digital?

La misma pregunta aquí: ¿Se supone que las firmas digitales funcionan con la última compilación estable que se puede descargar desde https://mozilla.github.io/pdf.js/getting_started/#download ?

FWIW: He probado la versión beta actualmente disponible y no veo ninguna firma. Lo único que noto es la siguiente línea en la consola del navegador:

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

No, las firmas digitales aún no están implementadas. Cualquiera que esté dispuesto a trabajar en esto puede enviar una solicitud de extracción. Gracias.

Quiero trabajar en esta funcionalidad. ¿Alguien puede darme algunas pautas sobre los componentes internos de PDF.js?

Hay algunos trabajos iniciales mencionados anteriormente que es posible que pueda utilizar. Asegúrese de leer la wiki para conocer el estilo del código y las instrucciones de prueba.

@wolvz : hola, ¿qué parte de viewer.js sería ese comentario? su repositorio parece ser la fuente original de pdf.js

la mayoría de los usuarios usarían los archivos de versión estable.

Como el complemento de Adobe Acrobat quedará obsoleto cuando se lance Mozilla Firefox 59 ESR, las funciones como mostrar firmas digitales ahora son realmente necesarias en pdf.js para los usuarios empresariales.

Hemos implementado una solución de firma digital basada en PKIjs y PDFjs que es capaz de verificar y crear firmas digitales. Puede ver un ejemplo de esto viendo la ley de firma digital de EE. UU. Aquí .

image

El espectador actualmente confía en las CA de la lista de confianza eIDAS, así como en los emisores S / MIME de confianza de Mozilla.

Si tiene algún problema, envíeme un correo electrónico a [email protected] con archivos de muestra, si los hubiera.

@rmhrisk ¿ puede proporcionar un repositorio de github con un código de muestra?

@xrkolovos la gran mayoría del trabajo necesario para hacer que el trabajo de firma y verificación sea de código abierto; incluye https://github.com/PeculiarVentures/PKI.js , https://github.com/PeculiarVentures/ASN1.js , https://github.com/PeculiarVentures/xadesjs/ , https://github.com / PeculiarVentures / tl-create y https://github.com/PeculiarVentures/webcrypto-liner.

También terminamos creando nuestra propia biblioteca de PDF (aunque usamos PDFjs para renderizar) para que podamos crear los diferentes tipos de firmas que permite PDF. Esta biblioteca eventualmente se hará pública, pero no está lista para el consumo público en este momento.

La fuente para nuestro visor no se hará pública, pero con las bibliotecas anteriores, alguien podría reproducir la verificación en sus propios visores. Tenemos un ejemplo básico de cómo hacer esto aquí: https://pkijs.org/examples/PDFexample.html solo necesitaría integrarse en sus visores.

¿Cuándo se fusionará con pdf.js?

@Aarbel en este punto, no sé cuándo encontraremos el tiempo para refactorizar lo que tenemos para que pueda fusionarse fácilmente, pero nos gustaría ver que la verificación se encuentre en PDFjs. Dicho esto, el equipo de PDFjs ha expresado previamente su preocupación por el tamaño que representaría esta función debido a las dependencias necesarias. Mientras esto sea una preocupación, no tendrá sentido dedicar tiempo de ingeniería a hacer este trabajo.

En mi humilde opinión, no implementarlo antes de que se lance Firefox 59 (ESR) significaría el final de Firefox en la empresa si Chrome o Edge pueden leer firmas digitales.

@FrenchHope ni Chrome de

¿Alguna actualización sobre esta funcionalidad?

@Snuffleupagus @yurydelendik @timvandermeij ? :)

Como expliqué en https://github.com/mozilla/pdf.js/pull/7702#pullrequestreview -4866355, el primer paso será crear una API abstracta que permita integrar cualquier PKI / criptografía personalizada con PDF.js.

@rmhrisk No me importan los usuarios de Chrome. Me preocupan los usuarios empresariales de Firefox. Muchos ahora usarán el navegador Edge o Internet Explorer si Firefox ya no puede verificar las firmas digitales con el complemento Adobe Acrobat Reader.

Muchas empresas migran a Windows 10 ahora ...

Tampoco Edge o IE.

@rmhrisk IE puede, con Adobe Acrobat Reader ActiveX.

editar: Edge puede mostrar la firma digital pero no le informa de la validez de la firma como lo hace Adobe Acrobat Reader.

ActiveX ha quedado obsoleto y finalmente no funcionará.

Edge No borra la firma digital, muestra la imagen en una anotación independientemente del estado de la firma.

Hola, ¿cuál es el estado actual de esta función?

No se está trabajando en ello en este momento, pero recientemente alguien mostró interés en el código anterior en IRC. El primer paso sería realmente https://github.com/mozilla/pdf.js/issues/1076#issuecomment -374244765.

Hola, ¿tiene alguna fecha esperada como Dic 2018 o tal vez 2019 para lanzar esa API?
Gracias por el visor de pdf por cierto, funciona excelente

Quería implementar la solución simple que se mencionó anteriormente ... Comentando las siguientes líneas:

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

Sin embargo, esto está provocando un error en la consola (de util.js: 418). ¿Alguien sabe qué causa este problema (además del hecho de que ahora se muestra la firma)?

Error:

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
Lo intenté y si comentas

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

en pdf.worker.js construido, entonces funciona.

Sería bueno al menos ofrecer una opción para esto. En nuestro caso por ejemplo, ya sabemos que la firma es válida, porque validamos firmas antes.

@strazovan Gracias, y estuvo de acuerdo. Creé una bandera que se puede configurar en default_preferences.json. ¡Puedo publicar esos cambios si está interesado!

@brianholle Hola, seguiré tu ejemplo. Anotado con este código, Chrome se muestra normalmente, pero la imagen firmada digitalmente en el navegador IE oculta el texto.

@hanxiaodao Estás diciendo que al comentar el código de bloqueo:

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

¿Tiene problemas para mostrar en IE?

@brianholle Gracias por tu respuesta. Sigo tu ejemplo, pero hubo un problema en IE 11. El capítulo rojo de la firma digital oscurece el contenido del texto.
Este es el efecto sobre el cromo.
chrome pic
Este es el efecto en IE11.
ie11_pic

¿Podemos obtener estimaciones de los mantenedores si se hará algún esfuerzo en la verificación de firmas?

No es una prioridad para nosotros en este momento, pero si alguien quiere contribuir con esto (consulte los comentarios anteriores para saber cómo se debe implementar), entonces estamos dispuestos a considerar la integración de esto en PDF.js.

También nos interesa mostrar firmas digitales que no se pueden verificar. Por favor, vea un ejemplo adjunto.
Verpf-Erklärg-Bundesdatenschutz-Sig.pdf

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

error:

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)

y por qué no renderizar "div. annotationLayer"

Jaja, conozco este ... está relacionado con el # 10350. Entonces necesitas comentar esta línea:
// this.setFlags (AnnotationFlag.HIDDEN);
y agregue esta línea después de eso:
data.fieldValue = null;

¿Cómo configurar el pdf o pdf_viewer para habilitar el util.js que controla el interruptor que se muestra en el sello? Hay algunas opciones de AnnotationFlag en el archivo util.js como INVISIBLE 0x01 、 HIDDEN 0x02. Modifico AnnotionFlag en pdf.worker.js de HIDDEN a PRINT. ¿Puedo configurarlos sin esta forma?

Debería ser una característica muy buena. ¡Con suerte, esta será una característica pronto!

¿Alguien conoce alguna solución confiable para esto? La edición de archivos compilados solo puede funcionar localmente o con fines de prueba, pero no más que eso.

¿Es pdfjs un proyecto muerto? ¿Por qué no implementan durante tantos años las características más buscadas?

image

Quiero lograr que pueda mostrar una pequeña notificación en algún lugar de PDF.js de que las firmas digitales no están validadas. Lo hago funcionar en Chrome, pero no en los otros navegadores. Está lejos de ser el mejor de los casos, pero realmente queremos mostrar esas firmas incluso si no están validadas al 100%. Intenté cambiar el código pdf.worker.js en la pieza donde this.setFlags (AnnotationFlag.HIDDEN); destacado. Agregué una construcción "document.getElementbyId" donde muestro mi contenedor cuando hay 1 o más firmas. Pero todos los navegadores (excepto Chrome) no reconocen "documento". ¿Existe una opción para agregar una propiedad en el documento o algo así, y usarla en viewer.js? Hay más construcciones con getElementbyId. Cualquier ayuda sería increíble.

Recientemente, empaquetamos nuestro visor que admite la verificación de firmas en un componente web e iframe; puede encontrar más información sobre cómo usarlo aquí: https://verify.ink/

rmhrisk eso es genial !!!

@brianholle Gracias por tu respuesta. Sigo tu ejemplo, pero hubo un problema en IE 11. El capítulo rojo de la firma digital oscurece el contenido del texto.
Este es el efecto sobre el cromo.
chrome pic
Este es el efecto en IE11.
ie11_pic
Tengo la misma pregunta en IE, ¿ha resuelto esto?

Nuestra organización está formada por más de 2000 personas. Todos ellos usan Chrome, no Firefox porque Firefox no puede mostrar las firmas de los PDF correctamente.
Creo que esto debería ser una prioridad para Mozilla.

@wolvz : ¿Algún progreso de su lado?

+1

+1

Recientemente, empaquetamos nuestro visor que admite la verificación de firmas en un componente web e iframe; puede encontrar más información sobre cómo usarlo aquí: https://verify.ink/

@rmhrisk
Ryan, ¿has considerado abrir una versión de este visualizador a la comunidad?

Hemos implementado una solución de firma digital basada en PKIjs y PDFjs que es capaz de verificar y crear firmas digitales. Puede ver un ejemplo de esto viendo la ley de firma digital de EE. UU. Aquí .

image

El espectador actualmente confía en las CA de la lista de confianza eIDAS, así como en los emisores S / MIME de confianza de Mozilla.

Si tiene algún problema, envíeme un correo electrónico a [email protected] con archivos de muestra, si los hubiera.

@rmhrisk
Ryan, ¿has considerado abrir una versión de este visualizador a la comunidad?

@lexcorp hicimos https: /verify.ink para que pueda incrustar fácilmente nuestro visor era un componente web.

Agregarlo es 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>

Recientemente agregamos soporte para tiendas raíz personalizadas también:
https://verify.ink/guides#root -certificates

De los diversos hilos relacionados con las firmas digitales, tengo la impresión de que la razón principal del progreso que falta es que no se pueden verificar las firmas como condición previa para mostrarlas.

¿Tendría sentido distinguir los dos casos de uso "Verificar firma" y "Mostrar firma"?

Creo que hay muchos casos de uso en los que la visualización de firmas incluso no verificadas (si es necesario con una advertencia agregada por el equipo del proyecto específico) es todo lo que se requiere y es suficiente. Si esto ya es posible con modificaciones menores del código, ¿por qué no es una funcionalidad oficial que se puede activar o desactivar?

El problema de mostrar la firma si no es válida es que da a los usuarios la impresión de que es válida.

Las firmas digitales, a diferencia de sus contrapartes húmedas sintéticas, están destinadas a denotar tanto la autenticidad de una firma como la intención asociada a ella.

Al mostrar la imagen de la firma sin validarla, le está sugiriendo al usuario que es auténtica cuando podría ser solo una copia de una imagen.

Pero no todas las firmas digitales válidas tendrán una representación visual en un PDF, ¿verdad? PDF también permite firmar sin una representación visual que yo sepa.

¿No debería el usuario de la biblioteca decidir si su aplicación / caso de uso permite la visualización de firmas válidas / inválidas o si se requieren medidas adicionales como advertencias? Un caso de uso que tengo en mente es marcar regiones en archivos PDF y considerar también regiones de firmas. Aún puede ser de carácter informativo aunque se requieren otras herramientas para la validación final. No veo la desventaja de ofrecer la pantalla como una característica opcional.

Pero no todas las firmas digitales válidas tendrán una representación visual en un PDF, ¿verdad? PDF también permite firmar sin una representación visual que yo sepa.

Ambas afirmaciones son correctas 1) no todos los PDF contienen una representación visual (aunque la mayoría sí). 2) PDF permite una firma amplia del documento. En este error, sin embargo, lo que he visto es el interés en mostrar la firma visual asociada con una firma digital y no una firma de todo el documento.

Podría haber otro error para presentar para el soporte de firma en todo el documento que no tiene representación visual, pero no recuerdo una sola solicitud para esto en ninguno de los errores relacionados con PDFjs que existen en las firmas digitales.

¿No debería el usuario de la biblioteca decidir si su aplicación / caso de uso permite la visualización de firmas válidas / inválidas o si se requieren medidas adicionales como advertencias?
Personalmente, creo que un desarrollador de aplicaciones debería poder elegir hacer lo que quiera con su aplicación.

Sin embargo, también está la cuestión de qué debería elegir hacer una biblioteca como PDF.js. En mi opinión, exponer una opción que es insegura, fácilmente malinterpretada y que dará como resultado malos resultados de seguridad para el usuario final de la biblioteca no es algo que los productores de bibliotecas deberían facilitar.

Imagínese si esta función estuviera completa hubiera sido de gran ayuda durante esta cuarentena por COVID-19, imagine cuántas transacciones, contratos, etc.

Se podrían haber realizado desde casa, sin embargo he presenciado que esta funcionalidad lleva años estancada, no sé el motivo pero considero que en combinación con otras herramientas podría ser de gran ayuda para el trabajo colaborativo, home office, etc.

Estoy totalmente de acuerdo. Las firmas digitales serán cada vez más valiosas en los próximos años. Mi caso de uso es una herramienta utilizada en el desarrollo de dispositivos médicos. Sin firmas digitales, nuestro trabajo diario desde casa sería mucho más difícil. Esa es la razón por la que dejaría que el proyecto use la biblioteca para encontrar una compensación entre los riesgos y el valor del cliente o para tomar medidas adicionales que sean apropiadas para su caso de uso específico.

También estoy totalmente de acuerdo en que la firma digital es una gran característica que falta.

Sin embargo, también está la cuestión de qué debería elegir hacer una biblioteca como PDF.js. En mi opinión, exponer una opción que es insegura, fácilmente malinterpretada y que dará como resultado malos resultados de seguridad para el usuario final de la biblioteca no es algo que los productores de bibliotecas deberían facilitar.

La biblioteca es implementada por desarrolladores, que deben ser conscientes de la seguridad.
Por mi parte, si tengo la función, por supuesto mostraré la firma, pero también verifico y validaré el lado del servidor de firmas para poder mostrar una advertencia si la firma no es válida.

@rmhrisk
¿Planeas abrir el código a la comunidad? Porque no tengo un solo caso en el que pueda 1 / Permitir que los documentos estén disponibles en Internet 2 / Permitir que un tercero acceda a los documentos 3 / Permitir que un tercero inyecte javascript en el navegador del usuario.
Eso sería una gran adición a pdfjs.

@rmhrisk
¿Planeas abrir el código a la comunidad? Porque no tengo un solo caso en el que pueda 1 / Permitir que los documentos estén disponibles en Internet 2 / Permitir que un tercero acceda a los documentos 3 / Permitir que un tercero inyecte javascript en el navegador del usuario.
Eso sería una gran adición a pdfjs.

Abrimos el código fuente de todas las bibliotecas que usamos para crear nuestro visor, y hay muchas y muchas son bastante complicadas; Por ejemplo, mire la pieza de PKIj que maneja la validación de certificados para el espectador. También ofrecemos licencias comerciales con soporte.

No utilizaremos el código abierto para el espectador, hacer que este trabajo requiera una cantidad significativa de tiempo e inversión y ese tiempo tiene valor. Sin embargo, nos complace ayudar a otros a usar las bibliotecas de código abierto que creamos para hacer esto posible.

Re: 1; el espectador no requiere que los documentos estén en Internet.

Re: 2; el espectador no requiere que un tercero acceda a los documentos.

Re: 3; es posible alojar el componente web para que pueda revisar y controlar las actualizaciones del componente.

También estoy totalmente de acuerdo en que la firma digital es una gran característica que falta.

Sin embargo, también está la cuestión de qué debería elegir hacer una biblioteca como PDF.js. En mi opinión, exponer una opción que es insegura, fácilmente malinterpretada y que dará como resultado malos resultados de seguridad para el usuario final de la biblioteca no es algo que los productores de bibliotecas deberían facilitar.

La biblioteca es implementada por desarrolladores, que _deben_ ser conscientes de la seguridad.
Por mi parte, si tengo la función, por supuesto mostraré la firma, pero también verifico y validaré el lado del servidor de firmas para poder mostrar una advertencia si la firma no es válida.

"Debería ser" y "son" son dos cosas diferentes. Mostrar la imagen de la firma cuando la firma no es válida o no es de confianza es un gran ejemplo del tipo de decisión que alguien podría tomar sin comprender completamente las consecuencias.

Imagínese si esta función estuviera completa hubiera sido de gran ayuda durante esta cuarentena por COVID-19, imagine cuántas transacciones, contratos, etc.

Se podrían haber realizado desde casa, sin embargo he presenciado que esta funcionalidad lleva años estancada, no sé el motivo pero considero que en combinación con otras herramientas podría ser de gran ayuda para el trabajo colaborativo, home office, etc.

Estoy totalmente de acuerdo que es por eso que creamos y abrimos todas las bibliotecas que hicieron posible nuestro visor. También es la razón por la que permitimos que las personas usen nuestro visor de forma gratuita.

Gracias al trabajo que hemos realizado, alguien podría ciertamente volver a crear el trabajo del visor que hicimos con mucho menos esfuerzo y enviar los PR asociados a PDFjs, incluso estaríamos felices de revisar el código de esos PR.

Necesito mostrar archivos PDF en mi aplicación Angular CLI, en un contexto donde la validez de la firma no es relevante, y la única parte importante es tener una visualización precisa.
Mi caso de prueba fue el pdf de muestra con una firma digital de Adobe.
Como ya probé muchas respuestas, condensaré los resultados de mis investigaciones a continuación.

La respuesta más común que he visto es comentar las siguientes líneas en pdf.worker.js (líneas 48353 a 48355):

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

Sin embargo, esto no funcionó.

Comentar las siguientes líneas en annotation.js directamente en pdfjs-dist tampoco funcionó (líneas 285 a 287):

case 0:
        this.color = null;
        break;

Esto tampoco funcionó, aunque no sabía cómo colocar la línea de código dada:
(<any>window).pdfWorkerSrc = '<path_to_file>/pdf.worker.js';

Intenté al menos obtener las anotaciones en la página , pero cada página devolvió una matriz vacía:

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

Es importante que mi aplicación muestre el pdf como está. Como mínimo, me gustaría poder hacer que los rectángulos delimitadores de la firma muestren un marcador de posición en su lugar.
¿Alguien podría ayudarme?

Necesito mostrar archivos PDF en mi aplicación Angular CLI, en un contexto donde la validez de la firma no es relevante, y la única parte importante es tener una visualización precisa.
Mi caso de prueba fue el pdf de muestra con una firma digital de Adobe.
Como ya probé muchas respuestas, condensaré los resultados de mis investigaciones a continuación.

Hola, creo que casi lo tienes con tu primer intento ... ¿has probado esto https://github.com/mozilla/pdf.js/issues/1076#issuecomment -446959325?

Solo lo probé: nada cambió.
¿Alguna otra idea?

Este problema se ha abierto desde hace bastante tiempo, ¿cuál es el plan actual para abordarlo y cómo podemos ayudar?

Si no puedo mostrar la firma, al menos, me gustaría mostrar un rectángulo de marcador de posición donde debería estar.
(Simplemente conociendo las coordenadas x, y así como el ancho y largo de la firma)

Por supuesto, mostrar la firma aún sería el mejor escenario (una vez más, no necesito verificarlo en mi caso de uso específico).

¿Sería una opción agregar una opción de renderizado para mostrar las firmas no verificadas?
De esta forma los usuarios de pdf.js podrían decidir si quieren correr el riesgo de mostrarlos o no.

Mostrar una firma criptográfica invalidada es tan malo como mostrar una validada incorrectamente:
https://www.pdf-insecurity.org/

¿Qué pasa si la firma ha sido validada correctamente antes por digamos un servicio de backend?
Esto significaría que la firma estaba bien, pero aún así no se podía mostrar en una aplicación cliente.

Una opción de renderizado para mostrar la firma o no permitiría a los usuarios de pdf.js validar la firma de alguna manera y luego decidir por sí mismos si mostrarla o no.
También eliminaría la carga de los desarrolladores de pdf.js para proporcionar verificación de firmas, ya que probablemente no debería ser parte de pdf, una biblioteca de renderizado.
Estrictamente, no mostrar la firma limita los casos de uso de pdf.js.

¿Qué pasa si la firma ha sido validada correctamente antes por digamos un servicio de backend?
Esto significaría que la firma estaba bien, pero aún así no se podía mostrar en una aplicación cliente.

Una opción de renderizado para mostrar la firma o no permitiría a los usuarios de pdf.js validar la firma de alguna manera y luego decidir por sí mismos si mostrarla o no.
También eliminaría la carga de los desarrolladores de pdf.js para proporcionar verificación de firmas, ya que probablemente no debería ser parte de pdf, una biblioteca de renderizado.
Estrictamente, no mostrar la firma limita los casos de uso de pdf.js.

Hacer la validación entre el servidor y el cliente está bien. Exponer una bandera para mostrar la firma como válida y validada sería una pistola.

Hacer la validación entre el servidor y el cliente está bien. Exponer una bandera para mostrar la firma como válida y validada sería una pistola.

Estamos tratando con firmas verificadas pero no podemos mostrarlas (sin piratearlas) en el navegador del cliente usando pdf.js
Entonces, ¿qué otra opción para renderizar archivos PDF en el navegador del cliente sugeriría para renderizar la representación visual de la firma verificada?

¿Puede parchear sus PDFjs antes de la implementación para tener el comportamiento que necesite?

Eso es lo que quise decir con "piratería" y eso es exactamente lo que estamos obligados a hacer actualmente :-(

No veo por qué seguimos haciendo preguntas sobre el tema en sí: los "trucos" ni siquiera funcionaron para mí, y todavía lo necesito.

En mi caso de uso, la validez de las firmas no está en duda. Sin embargo, necesito mostrarlos, o al menos hacerle saber al usuario que hay "algo ahí" en lugar de solo esa parte en blanco del lienzo.
No me importa si la API viene con un gran párrafo rojo de advertencia sobre firmas no verificadas, o si me obliga legalmente a decir que no se puede verificar, o si me advierte que es bajo mi propio riesgo.
... Solo necesito mostrar la firma.

Como mínimo, realmente me gustaría tener la posición y el tamaño de las firmas en el documento, de modo que pueda mostrar un cuadro gris en su lugar con "hey, usuario, se supone que debe haber una firma allí" escrito en ellos.

Actualmente, el usuario no tiene la capacidad de saber que el documento está firmado en este lugar.
¿No es esa una forma aún peor de templar?

Si hubiera un booleano que permitiera mostrar todas las firmas digitales del documento como cuadros de plantilla grises transparentes, eso sería lo suficientemente satisfactorio y esa característica no plantearía ningún problema de ética / seguridad.

(También me gustaría decir que el problema aparentemente ha estado pendiente desde 2012 con más de cien comentarios, solo en este hilo. No creo que sea el único que espera esta función)

Las cajas grises parecerían más bien un error de representación y muy probablemente sobrecargarían una línea directa de soporte proporcionada :-)
Tenemos un truco en funcionamiento, que funciona bien por ahora, pero es cierto que es muy feo:

  1. Descargue la versión actual, transpilada y minimizada de pdfjs-dist
  2. Parche las líneas en cuestión en la versión transpilada.
  3. Suelte como nuevo paquete privado en npm-repo interno.
  4. Utilice el paquete parcheado en lugar del paquete pdfjs-dist original.

Feo, ¿verdad? Pero funciona y procesa las firmas incrustadas sin problemas.

Las cajas grises parecerían más bien un error de representación y muy probablemente sobrecargarían una línea directa de soporte proporcionada :-)

Sí, sí, sí, me refiero a cualquier plantilla / imagen / mensaje que pueda complementarse con * el pdf contiene firmas digitales que no se pudieron verificar y, como tal, no se mostraron. Todo lo que pudiera entender el usuario si un mensaje lo explicara.

  1. Parche las líneas en cuestión en la versión transpilada.

Actualmente estoy usando Angular CLI con pdfjs-dist instalado en mis node_modules, pero cualquier solución que haya escrito hace algunas publicaciones no funcionó de mi lado, y tampoco esto:

Hola, creo que casi lo tienes con tu primer intento ... ¿has probado este # 1076 (comentario) ?

¿Me perdí algo o mi caso es demasiado específico para esa solución?

Seguimos la explicación en este hilo.
https://github.com/mozilla/pdf.js/issues/4743#issuecomment -163953288

Básicamente cambiamos esta parte:

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

A esto:

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

Sé que podría eliminar todo el "si", pero queríamos el parche más pequeño posible.

¡Ay! Esa es de hecho la solución que no funcionó de mi lado.
Lo intentaré de nuevo cuando vuelva al pdf que muestra parte de mi aplicación.
Todavía no creé mi propio paquete, pero cambiar el archivo directamente en node_modules / pdfjs-dist no cambió nada la última vez que lo intenté.

¿Cambió ambos archivos pdf.worker.js y pdf.worker.min.js
Esto fue necesario en nuestro enfoque.

¿Cambió ambos archivos pdf.worker.js y pdf.worker.min.js
Esto fue necesario en nuestro enfoque.

¡Plantea un punto excelente que puede que haya pasado por alto!
Lo intentaré rápidamente hoy y veré si funciona.

Hola, me gusta tu enfoque, pero desafortunadamente no funcionó para mí.
Cambié las líneas así:

Seguimos la explicación en este hilo.
# 4743 (comentario)

Básicamente cambiamos esta parte:

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

A esto:

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

Sé que podría eliminar todo el "si", pero queríamos el parche más pequeño posible.

Luego lo construí con gulp generic y usé los recursos construidos.

¿Cambió ambos archivos pdf.worker.js y pdf.worker.min.js
Esto fue necesario en nuestro enfoque.

El pdf.worker.js fue construido pero usted menciona pdf.worker.min.js , ¿cómo se construye y dónde se almacena?
¿Qué me estoy perdiendo?

Muchas gracias por adelantado

@ ll-priva No construimos pdf.js nosotros mismos.
Como dije en el comentario https://github.com/mozilla/pdf.js/issues/1076#issuecomment -658601553, en realidad descargamos la versión ya construida de pdfjs-dist y parcheamos las versiones empaquetadas de pdf.worker.js y pdf.worker.min.js .

Mi explicación en https://github.com/mozilla/pdf.js/issues/1076#issuecomment -658609803 probablemente fue un poco confusa, lo siento.
Implementamos la solución descrita parcheando el paquete prediseñado https://www.npmjs.com/package/pdfjs-dist.
Luego usamos estas versiones parcheadas de pdf.worker.js y pdf.worker.min.js para enviar un paquete privado pdfjs-dist a nuestro repositorio interno npm.
Por último, pero no menos importante, usamos esta versión parcheada en nuestro código de producción en lugar del paquete oficial pdfjs-dist .

Espero que esto aclare un poco nuestro enfoque.

@PSpSynedra Muchas gracias. Eso funcionó para mí también

Estoy de vuelta en esta tarea por primera vez en unas pocas semanas, pero todavía no funciona de mi lado.
No he creado mi propio paquete privado por el momento: mientras no lo haya reconstruido, la modificación directa de los archivos en node_modulespdfjs-dist debería haber funcionado (localmente, entonces tendría que importar el pdf.js modificado como un activo o paquete).

Al buscar "Sig" en la carpeta, se obtienen 4 resultados de archivo diferentes:

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

Edité todas esas 4 ocurrencias para eliminar el contenido del "si" que borró el campo de firma y configuré una bandera para ocultarlo, como se mencionó anteriormente.
No sucedió nada diferente: getAnnotations () devuelve una matriz vacía y las firmas existentes aún no se muestran.

También sigo recibiendo este mensaje en la consola, que ni siquiera es un error o una advertencia (pdf.worker.js: 2965: 14):

Advertencia: tipo de campo de widget no implementado "Sig", recurriendo al tipo de campo base.

Al mirar el código, significa que annotation.js lo envuelve en una WidgetAnnotation "base", lo que significa que el mensaje no parece ser un problema, solo las banderas que eliminé.

¿Me estoy perdiendo de algo? Edité el archivo min.js así como el archivo js, ​​que están en la carpeta de compilación y, como tales, deberían ser los que se usan, por lo que todo debería haber funcionado ...
¿Qué hicieron exactamente @ ll- priva y

@Epsiom esto es lo que acabo de hacer, y funcionó para mí en aproximadamente 5 minutos: https://github.com/mozilla/pdf.js/issues/1076#issuecomment -446959325

Debes comentar el this.setFlags(AnnotationFlag.HIDDEN); y agregar data.fieldValue=null . El único archivo que modifiqué fue pdf.worker.js , que en nuestro caso es de la biblioteca pdfjs-dist, por lo que ya está minificado

@Epsiom y otros que pueden terminar aquí.
Tuve el mismo problema, edité archivos de trabajo en PDF sin resultado.

En mi caso, estoy usando https://github.com/VadimDez/ng2-pdf-viewer para mostrar pdf en una aplicación angular. Este módulo cargaba directamente el trabajador en pdf desde cloudflare, no desde un archivo local. Así que verifique si la aplicación web realmente está usando el archivo pdf.worker.js modificado. Puede verificar haciendo clic en el campo del widget no implementado, escriba la advertencia "Sig" en la consola y mueva el mouse hasta el nombre del archivo.

@konum La advertencia es de " http: // localhost : 4200 / assets / vendor / pdf.worker.js", pero ya comenté las dos líneas de este archivo como se dijo antes:
if (data.fieldType === 'Sig') { //this.setFlags(AnnotationFlag.HIDDEN); //data.fieldValue = null; }

Todavía no hay firma digital a la vista ...

@Epsiom tampoco funcionó para mí. Todavía lo estoy investigando.

@Epsiom Managed para ver la firma. En pdf.worker.js agregue esto en la línea 18480
caso "Sig":
return new SquareAnnotation (parámetros);

Está el interruptor justo encima de esta línea.
(0, _util.warn) ('Tipo de campo de widget no implementado "' + fieldType + '",' + "recurriendo al tipo de campo base.");

@konum no funcionó para mí:
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 ¿Está utilizando la última versión de pdf.js? en pdf.worker.js debería haber definida la clase SquareAnnotation.

@Epsiom solo para aclarar, solo se debe comentar this.setFlags(AnnotationFlag.HIDDEN); . data.fieldValue = null; debe agregarse si no está presente, pero NO debe comentarse.

También estamos usando el paquete pdfjs-dist, así que lo modificamos directamente, según un comentario anterior. ¿Está seguro de que el código que está modificando realmente se está ejecutando? Si está en node_modules, dependiendo de su compilación, algunos de esos activos pueden almacenarse en caché y es posible que no esté usando su código modificado.

@kjhangiani Recuerdo claramente haber
Intentaré agregar data.fieldValue = null; cuando vuelva a esta tarea y veré si funciona.

Agregando data.fieldValue = null; nuevo en el bloque if (data.fieldType === 'Sig') , así como un console.log("TEST") si acaso, y no pasó nada, mientras que "TEST" apareció correctamente en la consola, después del Warning: Unimplemented widget field type "Sig", falling back to base field type. habitual

¿Alguna otra idea?

@Epsiom Managed para ver la firma. En pdf.worker.js agregue esto en la línea 18480
caso "Sig":
return new SquareAnnotation (parámetros);

Está el interruptor justo encima de esta línea.
(0, _util.warn) ('Tipo de campo de widget no implementado "' + fieldType + '",' + "recurriendo al tipo de campo base.");

Eso funcionó para mí, me salvaste el día, gracias.

@yduybya ¿
¿Tiene alguna particularidad?
Creo que necesito actualizar mi versión de pdf.js y volver a intentarlo, aunque es bastante reciente.

¿Existe alguna manera fácil de actualizar pdf.js en una aplicación Angular 9?
Encontré el nuevo pdf.worker.js aquí (http://mozilla.github.io/pdf.js/build/pdf.worker.js), pero solo reemplazar ese archivo no funcionó (obviamente).

Rastreé mi proyecto hasta https://github.com/mozilla/pdf.js/issues/8836 y https://github.com/ashishyadav0019/pdfJS_angular4_Ts.git , pero estos proyectos usan archivos desactualizados.

Los archivos en pdf.js github y en pdfJS_angular4_Ts.git no están correlacionados.
¿Alguien sabe cómo importar correctamente pdf.js en un proyecto de Angular 9, con archivos actualizados?

@Epsiom para la aplicación Angular 8) Creo que debería funcionar en angular 9) Estoy usando https://github.com/VadimDez/ng2-pdf-viewer.

De ng2-pdf-viewer docs:
De forma predeterminada, el trabajador se carga desde cdnjs.cloudflare.com.
En su ruta de actualización de código al trabajador, por ejemplo, /pdf.worker.js
(ventana como cualquiera) .pdfWorkerSrc = '/pdf.worker.js';
Esto debe establecerse antes de que se procese el componente visor de pdf.

El uso de este proyecto agregará la dependencia pdfjs-dist a su proyecto. Edite node_modules / pdfjs-dist / build / pdf.worker.js con la sugerencia de squareAnnotation.

@konum Estoy usando pdf.js directamente y no ng2-pdf-viewer por múltiples razones, inspirándome en esto: https://github.com/ashishyadav0019/pdfJS_angular4_Ts.git
Tengo la dependencia pdfjs-dist, pero es el src/assets/vendor/pdf.worker.js que se usa.
Alguna idea ?

@Epsiom ¿Ha intentado actualizar los archivos pdf.js y pdf.worker.js al código más reciente?

@konum Eso es precisamente lo que estoy tratando de hacer, pero dado que pdf.js rara vez se usa en Angular, ya que la mayoría de los proyectos aparentemente solo necesitan ng2-pdf-viewer, y dado que los archivos utilizados en la última versión de pdf.js son diferentes , el proceso de hacerlo está lejos de ser obvio a primera vista.

Hola,

Comentando this.setFlags (AnnotationFlag.HIDDEN); en pdf.worker.js en v2.6.347 no muestra la imagen de la firma.

¿Hubo un cambio en eso?

@lainosantos Sí, hay un cambio. Si desactiva la representación de formularios, las firmas se muestran nuevamente.

@stephanrauh Gracias.

PDFViewerApplicationOptions.set('renderInteractiveForms', false);

¿Hay alguna forma de habilitar formularios y mostrar firmas?

@lainosantos No, pero encontré un buen renderInteractiveForms está desactivado. Utiliza Angular, pero supongo que puede extraer la idea incluso si está utilizando un marco diferente: https://medium.com/factory-mind/angular-pdf-forms-fa72b15c3fbd

Tengo asuntos más urgentes por el momento y no puedo dedicar tiempo a la tarea, pero si alguien logra importar una versión pdf.js actualizada en Angular 9, le agradecería profundamente.

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

@stephanrauh ... Bueno, excepto que necesito ser compatible con IE11 y solo usar el lienzo directamente para tener un visor de pdf personalizado, así que no puedo usar eso, lamentablemente.
Tampoco puedo usar ng2-pdf-viewer, ni nada por el estilo, realmente estoy preguntando sobre pdf.js en sí mismo, que es un caso realmente especializado.

¿Fue útil esta página
5 / 5 - 1 calificaciones

Temas relacionados

anggikolo11 picture anggikolo11  ·  3Comentarios

AlexP3 picture AlexP3  ·  3Comentarios

BrennanDuffey picture BrennanDuffey  ·  3Comentarios

THausherr picture THausherr  ·  3Comentarios

zerr0s picture zerr0s  ·  3Comentarios