Pdf.js: Recuerde ver la posición después de actualizar la página

Creado en 8 ene. 2016  ·  34Comentarios  ·  Fuente: mozilla/pdf.js

Actualmente, la posición de la vista se guarda mediante un hash basado en el contenido del archivo. Cuando la página se recarga, también debemos tener en cuenta la última posición, porque coincide con el comportamiento normal de los navegadores. Por lo general, cuando recarga una página web, se restaura el desplazamiento de desplazamiento (incluso si el contenido de la página cambió).

La motivación para este cambio proviene de experimentar el siguiente flujo de trabajo roto:

  1. Genere un archivo PDF local ( file://....pdf ).
  2. Abra PDF con PDF.js y desplácese a algún capítulo del archivo PDF.
  3. Edite el archivo PDF.
  4. Actualice el visor de PDF.js (por ejemplo, con F5).
  5. Resultado esperado: Conserve la posición de desplazamiento.
    Resultado real: la página 1 se muestra en la ventana gráfica.

Notas técnicas:

  • performance.navigation.type se puede utilizar para detectar la recarga de la página frente a la navegación.
  • history.state se conserva cuando se vuelve a cargar una página.
1-viewer

Todos 34 comentarios

Que sería increíble.

Soy un estudiante de Seneca College que aprende código abierto y esperaba trabajar en este error para mi curso. Si nadie más está trabajando en él actualmente, me gustaría intentarlo.

Nadie indicó que están trabajando en ello, ¡así que es todo tuyo! No dude en contactarnos en IRC o dejar un mensaje aquí en caso de que tenga preguntas.

Hola, muchas gracias por la rápida respuesta. Realmente quiero contribuir a un proyecto de código abierto. Empezaré a trabajar en ello de inmediato. Dado que es la primera vez que hago algo como esto, ¿hay algo que deba saber?
¡Muchas gracias!

Creo que toda la información necesaria para este parche se encuentra en https://github.com/mozilla/pdf.js/wiki/Contributing. A menos que esté tocando archivos en la carpeta src/ (lo cual no espero; supongo que solo necesitará tocar archivos en la carpeta web/ ), solo necesita ejecutar gulp lint y gulp unittest para verificar sus cambios. Puede ejecutar gulp server para iniciar un servidor local para probar sus cambios en el navegador. Si tiene más preguntas, consulte la wiki, contáctenos en IRC o pregunte aquí. ¡Buena suerte!

Gracias, empezaré a leer los archivos.

Estoy investigando esto, pero no sé si entendí muy bien el problema.

1 - Genere un archivo PDF local (archivo: //....pdf).
3 - Edite el archivo PDF.

Entonces, ¿el problema solo está relacionado con la construcción / generación de mi propio PDF? Por ejemplo, ¿construirlo con algún generador de pdf como latex / jspdf?

Hice lo siguiente y no pude reproducir:

  1. Construí un PDF y lo abrí con http://localhost:8888/web/viewer.html?file=/andrei_test/a4.pdf
  2. navegó a la página 3.
  3. Luego edité el pdf (agregó más texto en la página3)
  4. actualizado y vi aparecer el nuevo contenido en la página 3, pero todavía estaba en la página 3, pdf.js no me movió a la página 1.

Antes de esto, intenté actualizar el PDF predeterminado de viewer.html varias veces y tenía la impresión de que la página no se recordaba en absoluto. Pero ahora creo que lo entiendo, si lo actualizo demasiado rápido (antes de que se realice el hash interno para recordar dónde desplazarse hacia atrás después de la actualización), entonces simplemente me llevará al último lugar donde estaba antes de mi último desplazamiento, no a mi Ultima posicion. Pero si espero medio segundo más y luego actualizo, veo que está bien, obtengo la posición desplazada hasta donde me desplacé por última vez.

Así que no estoy seguro de lo que busco aquí. ¿Podría darnos más detalles sobre cómo reproducirse? ¡Gracias!

No puedo probar de nuevo en este momento, pero en el paso 4 solías conseguir que tu
salte a la página 1 después de la actualización (si el documento cambió). Eso dijo que no estaba
trabajando localmente pero a través de una conexión de servidor. No estoy seguro de si eso podría hacer un
diferencia.

El domingo, 31 de diciembre de 2017 a las 4:42 a. M., Andrei Petre [email protected]
escribió:

Estoy investigando esto, pero no sé si entendí muy bien el problema.
bien.

1 - Genere un archivo PDF local (archivo: //....pdf).
3 - Edite el archivo PDF.

Entonces, ¿el problema solo está relacionado con la construcción / generación de mi propio PDF? P.ej
construyéndolo con algún generador de pdf como latex / jspdf?

Hice lo siguiente y no pude reproducir:

  1. Construí un PDF y lo abrí con http: // localhost : 8888 / web /
    viewer.html? file = / andrei_test / a4.pdf
    http: // localhost: 8888 / web / viewer.html? file = / andrei_test / a4.pdf
  2. navegó a la página 3.
  3. Luego edité el pdf (agregó más texto en la página3)
  4. actualizado y vi aparecer el nuevo contenido en la página 3, pero todavía estaba
    en la página 3, pdf.js no me movió a la página 1.

Antes de esto, intenté actualizar el PDF predeterminado de viewer.html a
pocas veces y tenía la impresión de que la página no se recordaba en
todas. Pero ahora creo que lo entiendo, si lo actualizo demasiado rápido (antes de
El hash interno se realiza para recordar dónde desplazarse hacia atrás después de la actualización),
entonces me llevará a la última vez que estuve antes de mi último pergamino, no
a mi último puesto. Pero si me faltaba medio segundo más y luego refresco,
luego veo que está bien, obtengo la posición de desplazamiento hasta donde me desplacé por última vez.

Así que no estoy seguro de lo que busco aquí. ¿Podrías dar más detalles?
sobre cómo reproducirse? ¡Gracias!

-
Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/mozilla/pdf.js/issues/6847#issuecomment-354573873 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AGBkZqzS34MYDM8wZi41cNY0NiVUyoI-ks5tFsNqgaJpZM4HBeqE
.

Acabo de volver a probar y definitivamente volví a la página uno en la recarga. Esta
es con el navegador Chrome si eso marca la diferencia. Y sigo trabajando
de forma remota con el servidor http.
Por cierto, sharelatex, rstudio y otros están usando backends pdf.js y
aparentemente ya han resuelto este problema. ¿No podríamos simplemente pedirles que
contribuir con un parche?

El domingo 31 de diciembre de 2017 a las 7:18 a.m., Yasha Savelyev
escribió:

No puedo probar de nuevo en este momento, pero en el paso 4 solías conseguir que tu
salte a la página 1 después de la actualización (si el documento cambió). Eso dijo que no estaba
trabajando localmente pero a través de una conexión de servidor. No estoy seguro de si eso podría hacer un
diferencia.

El domingo, 31 de diciembre de 2017 a las 4:42 a. M., Andrei Petre [email protected]
escribió:

Estoy investigando esto, pero no sé si entendí muy bien el problema.
bien.

1 - Genere un archivo PDF local (archivo: //....pdf).
3 - Edite el archivo PDF.

Entonces, ¿el problema solo está relacionado con la construcción / generación de mi propio PDF? P.ej
construyéndolo con algún generador de pdf como latex / jspdf?

Hice lo siguiente y no pude reproducir:

  1. Construí un PDF y lo abrí con
    http: // localhost : 8888 / web / viewer.html? file = / andrei_test / a4.pdf
    http: // localhost: 8888 / web / viewer.html? file = / andrei_test / a4.pdf
  2. navegó a la página 3.
  3. Luego edité el pdf (agregó más texto en la página3)
  4. actualizado y vi aparecer el nuevo contenido en la página 3, pero todavía estaba
    en la página 3, pdf.js no me movió a la página 1.

Antes de esto, intenté actualizar el PDF predeterminado de viewer.html a
pocas veces y tenía la impresión de que la página no se recordaba en
todas. Pero ahora creo que lo entiendo, si lo actualizo demasiado rápido (antes de
El hash interno se realiza para recordar dónde desplazarse hacia atrás después de la actualización),
entonces me llevará a la última vez que estuve antes de mi último pergamino, no
a mi último puesto. Pero si me faltaba medio segundo más y luego refresco,
luego veo que está bien, obtengo la posición de desplazamiento hasta donde me desplacé por última vez.

Así que no estoy seguro de lo que busco aquí. ¿Podrías dar más detalles?
sobre cómo reproducirse? ¡Gracias!

-
Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/mozilla/pdf.js/issues/6847#issuecomment-354573873 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AGBkZqzS34MYDM8wZi41cNY0NiVUyoI-ks5tFsNqgaJpZM4HBeqE
.

Puedo confirmar que este problema es reproducible. No solo la página retrocedió, el zoom también se reinició. Sospecho que esto puede deberse a que el hash cambió cuando modificamos el archivo.

@timvandermeij ¿Está en juego? ¡Me gustaría intentarlo!

No puedo resolverlo

BrianNgo: Puedo confirmar que este problema es reproducible. No solo la página retrocedió, el zoom también se reinició. Sospecho que esto puede deberse a que el hash cambió cuando modificamos el archivo.

@BrianNgo ¿ probaste esto? ¿Podría darnos alguna información de reproducción paso a paso?

yashamon: Y sigue trabajando de forma remota con el servidor http

@yashamon, ¿ podrías explicar más tu configuración? Podría depender de eso, ya que cuando intenté ejecutar un servidor local y acceder a él en localhost (por ejemplo, http://localhost:8888/web/viewer.html?file=/andrei_test/a4.pdf ), no pude reproducir esto. También estaba usando chrome.

Jolo510: @timvandermeij ¿Está en juego? ¡Me gustaría intentarlo!

@ Jolo510 Está en juego, adelante. No estoy trabajando en eso, no pude reproducirlo la última vez que lo intenté.

El problema aquí es que el archivo cambió solo ligeramente, pero el hash cambió por completo. A los efectos de la prueba, el contenido real del PDF no importa, solo debe asegurarse de que los PDF que está probando tengan diferentes valores hash.

Para reproducir de manera más confiable, puede tomar un conjunto de archivos PDF completamente no relacionados (por ejemplo, los PDF en test/pdfs/ ) y sobrescribir un archivo PDF antes de volver a cargar PDF.js (con la vista configurada en la página 2, de modo que verá la diferencia entre la página 1 y la página 2). De esta manera, la misma ruta de archivo apuntará a un archivo diferente y podrá ver el error en acción.

@andreip Sí, lo estoy probando en local con Chrome. Lo que hice fue abrir el pdf similar al que tenías: http: // localhost : 8888 / web / viewer.html? File = / andrei_test / a4.pdf. Luego utilicé libreoffice para modificar el archivo y exportarlo. Se actualizó la página y se produjo el error.

En mi opinión, esto no es realmente un error. Al modificar el archivo, la aplicación percibe el archivo actual como un archivo nuevo (que es lo más seguro de asumir). Por lo tanto, la aplicación debe restablecer su historial para verlo como un archivo nuevo.

El problema real sería actualizar el archivo demasiado rápido antes de que se realice el hash interno.

@andreip ¡Impresionante! Veré si lo reposito localmente.

Planeo hacer que la aplicación se ejecute localmente esta noche. Luego, dedique algo de tiempo en uno o dos días para reproducir el error y profundizar en el código.

@BrianNgo Si el problema es actualizar el archivo demasiado rápido, ¿cuál sería una posible solución?

¿Algún progreso en esto?

El miércoles 17 de enero de 2018 a las 23:07, Johnnie Lo, [email protected] escribió:

Planeo hacer que la aplicación se ejecute localmente esta noche. Entonces haz algo de tiempo en
al día siguiente o dos para reproducir el error y profundizar en el código.

@BrianNgo https://github.com/brianngo Si el problema también se actualiza
rápidamente, ¿cuál sería una posible solución?

-
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/6847#issuecomment-358539017 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AGBkZmlmOIxzNatXTXTGW3bNaeNFkWFzks5tLtF2gaJpZM4HBeqE
.

@yashamon No, no he progresado en esto.

@ Rob - W
Oye ,
Veo a mucha gente intentarlo. Darle una oportunidad. Por favor, avíseme si necesitamos escribir una prueba para esto también

@ ankitverma2211 Si es posible, las pruebas serían geniales.
Sin embargo, no tenemos pruebas automatizadas para este tipo de funciones, por lo que si el parche parece razonable y pasa una prueba manual, también lo aceptaremos.

Me gustaría empezar con esto. ¿Alguien más está trabajando actualmente en esto?

No que yo sepa. ¡Siéntete libre de trabajar en esto!

Seguro que estoy comenzando con esto, les haré ping en IRC para obtener ayuda.

El lunes, 24 de diciembre de 2018 a las 4:24 p.m. Tim van der Meij [email protected]
escribió:

No que yo sepa. ¡Siéntete libre de trabajar en esto!

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

@timvandermeij He
Utiliza almacenamiento local para almacenar el historial de vistas de pdfjs con archivos como una matriz. En el que cada elemento almacena la huella del archivo y otros metadatos sobre el historial de la última vista. cuando modificamos una huella digital de archivo, el archivo cambia y para esa nueva huella digital no tenemos ningún historial de visualización.

mi huella digital de archivo anterior => 14ecd8cdbbf6f76f04030d59025b5937

huella digital después del cambio de archivo => 619c4c4f872e96e6514b25c6a1ae03f2

En lo que respecta al cálculo de huellas dactilares para un documento, depende del contenido y el avance del pdf.

aquí hay alguna referencia

cálculo de huella digital

referencia de desbordamiento de pila

déjame saber lo que dices sobre esto. ¿Deberíamos cerrar este tema?

Hola Rahul,

Podría ayudar si echa un vistazo a Sharelatex en acción, que utiliza pdf.js como
backend y ya tiene una solución, volver a renderizar archivos PDF después de la fuente de látex
cambio de código, que ciertamente cambiará cualquier hash, mientras se mantiene la vista
posición. Creo que sus extensiones son de código abierto en github, pero no
tenga un enlace listo.

El viernes 28 de diciembre de 2018 a las 3:01 p.m. Rahul Sharma [email protected]
escribió:

@timvandermeij https://github.com/timvandermeij He pasado por el
todo el código que está involucrado al renderizar el archivo pdf.
Utiliza almacenamiento local para almacenar en pdfjs ver el historial con archivos como un
formación. En el que cada elemento almacena la huella dactilar del archivo y otros
metadatos sobre el historial de la última vista. cuando modificamos la huella de un archivo de
el archivo cambia y para esa nueva huella digital no tenemos ninguna vista
historia.

mi huella digital de archivo anterior => 14ecd8cdbbf6f76f04030d59025b5937

huella digital después del cambio de archivo => 619c4c4f872e96e6514b25c6a1ae03f2

En lo que respecta al cálculo de huellas dactilares para un documento, depende
sobre el contenido y el avance en pdf.

aquí hay alguna referencia

cálculo de huella digital
https://github.com/mozilla/pdf.js/blob/58c3ea08202becf007c304512c44726719acb508/src/core/core.js#L513

referencia de desbordamiento de pila
https://stackoverflow.com/questions/33309378/using-fingerprint-generated-by-pdfjs-as-unique-id-for-a-pdf

déjame saber lo que dices sobre esto. ¿Deberíamos cerrar este tema?

-
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/6847#issuecomment-450426605 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AGBkZidcCqtZjNp18mXaFfC78IfPRj-1ks5u9oaTgaJpZM4HBeqE
.

Será de gran ayuda si puede compartir el enlace al repositorio que es responsable de esto y luego será una característica de este repositorio en lugar de un error

Solía ​​tener un script greasemonkey que reemplazaba la tecla "Cr" por un clic en "viewBookmark", que básicamente me resuelve este problema. No funcionó después de alguna versión de Firefox. Parece que greasemonkey no está cargado en pdf.js. ¿Está previsto?

EDITAR: después de un poco de búsqueda, creo que esto es intencional: https://discourse.mozilla.org/t/extensions-on-pdfjs-pages/28441

@timvandermeij @yashamon

Eché un vistazo al repositorio de Sharelatex. lo están haciendo usando el seguimiento de pdfjs.history con projectId en lugar de la huella digital que cambia con el documento cambiado, pero projectId para ese documento en particular sigue siendo el mismo para sharelatex.

Tengo algunas preguntas en mente. Traté de conectarme con ustedes en IRC pero no obtuve respuesta

Preguntas:

  1. es necesario mantener el número de página también cuando el pdf cambia y el usuario abre un nuevo archivo en una nueva pestaña.
    tal como se mantiene en el método actual de huellas dactilares.
  2. Si necesita estar solo en la pestaña actual, podemos usar sesiones, de lo contrario, agregaremos algunas claves más a view_history.
    por favor guíame

Corregido en # 10424.

Acabo de probar esto, sigue siendo el mismo comportamiento. La actualización de la página corrige la posición de la vista de página solo si el archivo pdf no se modifica; de lo contrario, la vista salta a la primera página. Esto es muy fácil de probar con latex, elija un documento, compile y obtenga una vista previa del pdf, agregue una palabra aleatoria en la fuente de latex, vuelva a compilar y obtenga una vista previa del pdf, la vista previa de pdfjs salta a la primera página. Estoy en la versión 2.2.191 en Chrome. Comprobaré en Firefox cuando tenga la oportunidad.

Probé con firefox, parece que en la última versión el problema está solucionado, entonces, ¿es solo que la versión de Chrome se está quedando atrás?

La versión de la extensión de Chrome incluye este parche. Su comportamiento puede diferir debido a una diferencia en cómo se comporta el navegador. Una vez publiqué una descripción detallada del problema en https://github.com/mozilla/pdf.js/commit/cdea75dc397f4eb4d6fd1f7d8a388c7d11df3452 (que era parte de https://github.com/mozilla/pdf.js/pull/6200) .

Envié un problema similar # 11359 con respecto a * pdf generado por látex. En realidad, no es correcto que esto use un "hash basado en el contenido del archivo" @ Rob - W. Más bien, es una identificación incrustada en el PDF al momento de la creación, y cómo se genera esa identificación depende de la aplicación generadora, para * latex es un hash basado en la combinación de la hora actual y el nombre de la ruta del archivo tex. Vea mi último comentario allí para una solución.

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

Temas relacionados

sujit-baniya picture sujit-baniya  ·  3Comentarios

patelsumit5192 picture patelsumit5192  ·  3Comentarios

aaronshaf picture aaronshaf  ·  3Comentarios

hp011235 picture hp011235  ·  4Comentarios

liuzhen2008 picture liuzhen2008  ·  4Comentarios