Pdf.js: Ingat posisi tampilan setelah menyegarkan halaman

Dibuat pada 8 Jan 2016  ·  34Komentar  ·  Sumber: mozilla/pdf.js

Saat ini posisi tampilan disimpan dengan hash berdasarkan konten file. Saat halaman dimuat ulang, kita juga harus memperhitungkan posisi terakhir, karena ini cocok dengan perilaku normal browser. Biasanya, saat Anda memuat ulang halaman web, offset gulir dipulihkan (meskipun konten halaman berubah).

Motivasi untuk perubahan ini berasal dari mengalami alur kerja yang rusak berikut ini:

  1. Buat file PDF lokal ( file://....pdf ).
  2. Buka PDF dengan PDF.js dan gulir ke beberapa bab di file PDF.
  3. Edit file PDF.
  4. Segarkan penampil PDF.js (misalnya dengan F5).
  5. Hasil yang diharapkan: Pertahankan posisi gulir.
    Hasil sebenarnya: Halaman 1 ditampilkan di viewport.

Catatan teknis:

  • performance.navigation.type dapat digunakan untuk mendeteksi pemuatan ulang halaman versus navigasi.
  • history.state disimpan saat halaman dimuat ulang.
1-viewer

Semua 34 komentar

Itu akan luar biasa.

Saya seorang mahasiswa di perguruan tinggi Seneca yang belajar open source, dan saya berharap bisa memperbaiki bug ini untuk kursus saya. Jika tidak ada orang lain yang sedang mengerjakannya, saya ingin mencobanya.

Tidak ada yang mengindikasikan bahwa mereka sedang mengerjakannya, jadi itu semua milik Anda! Jangan ragu untuk menghubungi kami di IRC atau tinggalkan pesan di sini jika Anda memiliki pertanyaan.

Hei terima kasih banyak atas balasan cepatnya. Saya sangat ingin berkontribusi pada proyek open source. Saya akan mulai mengerjakannya segera. Karena ini pertama kalinya saya melakukan hal seperti ini, apakah ada hal yang perlu saya ketahui?
Terima kasih banyak!

Saya pikir semua informasi yang diperlukan untuk tambalan ini terdaftar di https://github.com/mozilla/pdf.js/wiki/Contributing. Kecuali jika Anda menyentuh file di folder src/ (yang tidak saya duga; saya harap Anda hanya perlu menyentuh file di folder web/ ), Anda hanya perlu menjalankan gulp lint dan gulp unittest untuk memverifikasi perubahan Anda. Anda dapat menjalankan gulp server untuk memulai server lokal untuk menguji perubahan Anda di browser. Jika Anda memiliki pertanyaan lebih lanjut, periksa wiki, hubungi kami di IRC atau tanyakan di sini. Semoga berhasil!

Terima kasih, saya akan mulai membaca file.

Saya sedang menyelidiki ini tetapi saya tidak tahu apakah saya memahami masalahnya dengan baik.

1 - Buat file PDF lokal (file: //....pdf).
3 - Edit file PDF.

Jadi masalahnya hanya terkait dengan membangun / membuat PDF saya sendiri? Misalnya membangunnya dengan generator pdf seperti lateks / jspdf?

Saya melakukan hal berikut dan tidak dapat mereproduksi:

  1. Membuat PDF sendiri dan membukanya dengan http://localhost:8888/web/viewer.html?file=/andrei_test/a4.pdf
  2. dinavigasi ke halaman 3.
  3. Kemudian mengedit pdf (menambahkan lebih banyak teks di halaman3)
  4. menyegarkan dan melihat konten baru di halaman3 muncul tetapi saya masih di halaman 3, pdf.js tidak memindahkan saya ke halaman1.

Sebelum ini, saya hanya mencoba menyegarkan PDF default dari viewer.html beberapa kali dan saya mendapat kesan bahwa halaman itu tidak diingat sama sekali. Tapi sekarang saya pikir saya mengerti, jika saya menyegarkannya terlalu cepat (sebelum hashing internal dilakukan untuk mengingat di mana harus menggulir kembali setelah penyegaran), maka itu hanya akan membawa saya ke tempat terakhir saya sebelum gulungan terakhir saya, bukan ke saya. posisi terakhir. Tetapi jika saya menunggu setengah detik lagi dan kemudian menyegarkan, maka saya melihat tidak apa-apa, saya mendapatkan posisi gulir ke tempat saya terakhir menggulir.

Jadi saya tidak begitu yakin apa yang saya cari di sini. Bisakah Anda memberikan detail lebih lanjut tentang cara mereproduksi? Terima kasih!

Saya tidak dapat menguji lagi saat ini tetapi pada langkah 4 Anda biasa mendapatkannya
lompat ke halaman 1 setelah refresh (jika dokumen berubah). Yang mengatakan saya tidak
bekerja secara lokal tetapi melalui koneksi server. Tidak yakin apakah itu bisa membuat file
perbedaan.

Pada hari Minggu, 31 Desember 2017 jam 4.42 pagi, Andrei Petre [email protected]
menulis:

Saya sedang menyelidiki hal ini tetapi saya tidak tahu apakah saya sangat memahami masalahnya
baik.

1 - Buat file PDF lokal (file: //....pdf).
3 - Edit file PDF.

Jadi masalahnya hanya terkait dengan membangun / membuat PDF saya sendiri? Misalnya
membangunnya dengan generator pdf seperti latex / jspdf?

Saya melakukan hal berikut dan tidak dapat mereproduksi:

  1. Membuat PDF sendiri dan membukanya dengan http: // localhost : 8888 / web /
    viewer.html? file = / andrei_test / a4.pdf
    http: // localhost: 8888 / web / viewer.html? file = / andrei_test / a4.pdf
  2. dinavigasi ke halaman 3.
  3. Kemudian mengedit pdf (menambahkan lebih banyak teks di halaman3)
  4. menyegarkan dan melihat konten baru di halaman3 muncul tapi saya diam
    di halaman 3, pdf.js tidak memindahkan saya ke halaman1.

Sebelum ini, saya hanya mencoba menyegarkan PDF default dari viewer.html a
beberapa kali dan saya mendapat kesan bahwa halaman itu tidak diingat
semua. Tapi sekarang saya rasa saya mengerti, jika saya menyegarkannya terlalu cepat (sebelum file
hashing internal dilakukan untuk mengingat tempat menggulir kembali setelah penyegaran),
maka itu hanya akan membawa saya ke terakhir kali saya sebelum gulungan terakhir saya, bukan
ke posisi terakhir saya. Tapi jika saya membuang waktu setengah detik lagi dan kemudian menyegarkan,
kemudian saya melihat tidak apa-apa, saya mendapatkan posisi gulir ke tempat terakhir saya menggulir.

Jadi saya tidak begitu yakin apa yang saya cari di sini. Bisakah Anda memberikan detail lebih lanjut
ke cara mereproduksi? Terima kasih!

-
Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/mozilla/pdf.js/issues/6847#issuecomment-354573873 ,
atau nonaktifkan utasnya
https://github.com/notifications/unsubscribe-auth/AGBkZqzS34MYDM8wZi41cNY0NiVUyoI-ks5tFsNqgaJpZM4HBeqE
.

Saya baru saja menguji ulang dan pasti dipindahkan kembali ke halaman pertama saat memuat ulang. Ini
adalah dengan browser chrome jika itu membuat perbedaan. Dan masih bekerja
secara jarak jauh dengan http-server.
Omong-omong, sharelatex, rstudio dan lainnya menggunakan pdf.js backends dan
tampaknya telah memecahkan masalah ini. Tidak bisakah kita meminta mereka begitu saja
berkontribusi tambalan?

Pada hari Minggu, 31 Desember 2017 jam 7:18 pagi, Yasha Savelyev [email protected]
menulis:

Saya tidak dapat menguji lagi saat ini tetapi pada langkah 4 Anda biasa mendapatkannya
lompat ke halaman 1 setelah refresh (jika dokumen berubah). Yang mengatakan saya tidak
bekerja secara lokal tetapi melalui koneksi server. Tidak yakin apakah itu bisa membuat file
perbedaan.

Pada hari Minggu, 31 Desember 2017 jam 4.42 pagi, Andrei Petre [email protected]
menulis:

Saya sedang menyelidiki hal ini tetapi saya tidak tahu apakah saya sangat memahami masalahnya
baik.

1 - Buat file PDF lokal (file: //....pdf).
3 - Edit file PDF.

Jadi masalahnya hanya terkait dengan membangun / membuat PDF saya sendiri? Misalnya
membangunnya dengan generator pdf seperti latex / jspdf?

Saya melakukan hal berikut dan tidak dapat mereproduksi:

  1. Membuat PDF sendiri dan membukanya dengan
    http: // localhost : 8888 / web / viewer.html? file = / andrei_test / a4.pdf
    http: // localhost: 8888 / web / viewer.html? file = / andrei_test / a4.pdf
  2. dinavigasi ke halaman 3.
  3. Kemudian mengedit pdf (menambahkan lebih banyak teks di halaman3)
  4. menyegarkan dan melihat konten baru di halaman3 muncul tapi saya diam
    di halaman 3, pdf.js tidak memindahkan saya ke halaman1.

Sebelum ini, saya hanya mencoba menyegarkan PDF default dari viewer.html a
beberapa kali dan saya mendapat kesan bahwa halaman itu tidak diingat
semua. Tapi sekarang saya rasa saya mengerti, jika saya menyegarkannya terlalu cepat (sebelum file
hashing internal dilakukan untuk mengingat tempat menggulir kembali setelah penyegaran),
maka itu hanya akan membawa saya ke terakhir kali saya sebelum gulungan terakhir saya, bukan
ke posisi terakhir saya. Tapi jika saya membuang waktu setengah detik lagi dan kemudian menyegarkan,
kemudian saya melihat tidak apa-apa, saya mendapatkan posisi gulir ke tempat terakhir saya menggulir.

Jadi saya tidak begitu yakin apa yang saya cari di sini. Bisakah Anda memberikan detail lebih lanjut
ke cara mereproduksi? Terima kasih!

-
Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/mozilla/pdf.js/issues/6847#issuecomment-354573873 ,
atau nonaktifkan utasnya
https://github.com/notifications/unsubscribe-auth/AGBkZqzS34MYDM8wZi41cNY0NiVUyoI-ks5tFsNqgaJpZM4HBeqE
.

Saya dapat mengonfirmasi bahwa masalah ini dapat direkonstruksi. Tidak hanya halaman yang dipindahkan, zoom juga direset. Saya menduga ini mungkin karena hash berubah ketika kami memodifikasi file.

@timvandermeij Apakah ini diperebutkan? Saya ingin mencobanya!

Saya tidak bisa memahaminya

BrianNgo: Saya dapat memastikan bahwa masalah ini dapat direkonstruksi. Tidak hanya halaman yang dipindahkan, zoom juga direset. Saya menduga ini mungkin karena hash berubah ketika kami memodifikasi file.

@BrianNgo Apakah Anda mengerjakan lokal, dengan kode, atau bagaimana Anda mengujinya? Bisakah Anda memberikan info mereproduksi langkah demi langkah?

yashamon: Dan masih bekerja dari jarak jauh dengan http-server

@yashamon dapatkah Anda menjelaskan lebih lanjut tentang penyiapan Anda? Mungkin tergantung pada itu, karena ketika saya mencoba menjalankan server lokal dan mengaksesnya di localhost (misalnya http://localhost:8888/web/viewer.html?file=/andrei_test/a4.pdf ), saya tidak dapat mereproduksi ini. Saya juga menggunakan chrome.

Jolo510: @timvandermeij Apakah ini diperebutkan? Saya ingin mencobanya!

@ Jolo510 Terserah diperebutkan,

Masalahnya di sini adalah bahwa file tersebut hanya berubah sedikit, tetapi hashnya berubah total. Untuk tujuan pengujian, konten PDF sebenarnya tidak masalah, Anda hanya perlu memastikan bahwa PDF yang Anda uji memiliki hash yang berbeda.

Untuk mereproduksi lebih andal, Anda dapat mengambil satu set file PDF yang sama sekali tidak terkait (misalnya PDF di test/pdfs/ ), dan menimpa file PDF sebelum memuat ulang PDF.js (dengan tampilan diatur ke halaman 2, sehingga Anda akan melihat perbedaan antara halaman 1 dan halaman 2). Dengan cara ini, jalur file yang sama akan mengarah ke file yang berbeda dan Anda dapat melihat bug beraksi.

@andreip Ya, saya mengujinya di lokal dengan Chrome. Apa yang saya lakukan adalah membuka pdf seperti yang Anda miliki: http: // localhost : 8888 / web / viewer.html? File = / andrei_test / a4.pdf. Lalu saya menggunakan libreoffice untuk memodifikasi file dan mengekspornya. Refresh halaman dan bug terjadi.

Menurut saya, ini sebenarnya bukan bug. Dengan memodifikasi file, aplikasi menganggap file saat ini sebagai file baru (yang paling aman untuk diasumsikan). Oleh karena itu, aplikasi harus mengatur ulang riwayatnya untuk melihatnya sebagai file baru.

Masalah sebenarnya adalah saat memuat ulang file terlalu cepat sebelum hashing internal selesai.

@andreip Keren! Saya akan melihat apakah saya repo secara lokal.

Saya berencana menjalankan aplikasi secara lokal malam ini. Kemudian luangkan waktu dalam satu atau dua hari berikutnya untuk mereproduksi bug dan menggali kodenya.

@ BrianNgo Jika masalah

Ada kemajuan dalam hal ini?

Pada Rabu, 17 Jan 2018, 23:07 Johnnie Lo, [email protected] menulis:

Saya berencana menjalankan aplikasi secara lokal malam ini. Lalu luangkan waktu
satu atau dua hari berikutnya untuk mereproduksi bug dan menggali kode.

@BrianNgo https://github.com/brianngo Jika masalah juga menyegarkan
cepat, apa yang akan menjadi perbaikan potensial?

-
Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/mozilla/pdf.js/issues/6847#issuecomment-358539017 ,
atau nonaktifkan utasnya
https://github.com/notifications/unsubscribe-auth/AGBkZmlmOIxzNatXTXTGW3bNaeNFkWFzks5tLtF2gaJpZM4HBeqE
.

@yashamon Tidak, saya belum membuat kemajuan apa pun dalam hal ini.

@ Rob - W
hai,
Saya melihat banyak orang mencobanya. Cobalah. Tolong beri tahu saya jika kami perlu menulis tes untuk ini juga

@ ankitverma2211 Jika memungkinkan, tes akan sangat bagus.
Namun, kami tidak memiliki tes otomatis untuk fitur semacam ini, jadi jika tambalan terlihat masuk akal dan lolos tes manual, maka kami akan menerimanya juga.

Saya ingin memulai ini. apakah ada orang lain yang sedang mengerjakan ini?

Tidak yang saya tahu. Jangan ragu untuk mengerjakan ini!

Tentu saya mulai, ini akan mem-ping kalian di IRC untuk bantuan apa pun

Pada hari Senin, 24 Desember 2018 pukul 16:24 Tim van der Meij [email protected]
menulis:

Tidak yang saya tahu. Jangan ragu untuk mengerjakan ini!

-
Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/mozilla/pdf.js/issues/6847#issuecomment-449718751 ,
atau nonaktifkan utasnya
https://github.com/notifications/unsubscribe-auth/AF8SZdbnLGoX5cY1fvk02tcM_3o8KDctks5u8LJUgaJpZM4HBeqE
.

@timvandermeij Saya telah memeriksa seluruh kode yang terlibat saat merender file pdf.
Ini menggunakan penyimpanan lokal untuk menyimpan riwayat tampilan pdfjs dengan file sebagai array. Di mana setiap elemen menyimpan sidik jari file dan metadata lainnya tentang histori tampilan terakhir. ketika kami memodifikasi sidik jari file dari perubahan file dan untuk sidik jari baru itu kami tidak memiliki riwayat tampilan.

sidik jari file lama saya => 14ecd8cdbbf6f76f04030d59025b5937

sidik jari setelah perubahan file => 619c4c4f872e96e6514b25c6a1ae03f2

Sejauh saya telah melalui perhitungan sidik jari untuk dokumen itu tergantung pada konten dan trailer pdf.

berikut adalah beberapa referensi

perhitungan figerprint

referensi stackoverflow

beri tahu saya apa yang Anda katakan tentang ini. haruskah kita menutup masalah ini?

Hai Rahul,

Mungkin membantu jika Anda memeriksa Sharelatex dalam tindakan, yang menggunakan pdf.js sebagai file
backend dan sudah memiliki solusi, merender pdf setelah sumber lateks
perubahan kode, yang pasti akan mengubah hash apa pun, sambil tetap mempertahankan tampilan
posisi. Saya yakin ekstensi mereka open source di github, tetapi tidak
siapkan tautannya.

Pada hari Jumat, 28 Desember 2018 pukul 15.01 Rahul Sharma [email protected]
menulis:

@timvandermeij https://github.com/timvandermeij Saya telah melalui
seluruh kode yang terlibat saat merender file pdf.
Ini menggunakan penyimpanan lokal untuk menyimpan ke pdfjs melihat riwayat dengan file sebagai file
Himpunan. Di mana setiap elemen menyimpan sidik jari file dan lainnya
metadata tentang histori tampilan terakhir. saat kami memodifikasi sidik jari file
file berubah dan untuk sidik jari baru itu kami tidak memiliki tampilan apa pun
sejarah.

sidik jari file lama saya => 14ecd8cdbbf6f76f04030d59025b5937

sidik jari setelah perubahan file => 619c4c4f872e96e6514b25c6a1ae03f2

Sejauh saya telah melalui perhitungan sidik jari untuk sebuah dokumen itu tergantung
pada konten dan trailer pdf.

berikut adalah beberapa referensi

perhitungan sidik jari
https://github.com/mozilla/pdf.js/blob/58c3ea08202becf007c304512c44726719acb508/src/core/core.js#L513

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

beri tahu saya apa yang Anda katakan tentang ini. haruskah kita menutup masalah ini?

-
Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/mozilla/pdf.js/issues/6847#issuecomment-450426605 ,
atau nonaktifkan utasnya
https://github.com/notifications/unsubscribe-auth/AGBkZidcCqtZjNp18mXaFfC78IfPRj-1ks5u9oaTgaJpZM4HBeqE
.

akan sangat membantu jika Anda dapat membagikan tautan ke repo yang bertanggung jawab untuk ini dan kemudian itu akan menjadi fitur ke repo ini daripada bug

Saya dulu memiliki skrip greasemonkey yang menggantikan kunci "Cr" menjadi klik "viewBookmark", yang pada dasarnya memecahkan masalah ini untuk saya. Itu tidak berfungsi setelah beberapa versi Firefox. Sepertinya greasemonkey itu tidak dimuat dalam pdf.js. Apakah itu dimaksudkan?

EDIT: setelah sedikit pencarian saya pikir ini disengaja - https://discourse.mozilla.org/t/extensions-on-pdfjs-pages/28441

@timijam @yamon

Saya telah melihat repo Sharelatex. mereka melakukannya dengan melacak pdfjs.history dengan projectId daripada sidik jari yang berubah dengan dokumen berubah, tetapi projectId untuk dokumen tertentu tetap sama untuk sharelatex.

Saya punya beberapa pertanyaan di benak saya. Saya mencoba untuk terhubung dengan kalian di IRC tetapi tidak mendapat tanggapan

Pertanyaan:

  1. adalah kita perlu mempertahankan nomor halaman juga saat pdf berubah dan pengguna membuka file baru di tab baru.
    karena dipertahankan dalam metode sidik jari saat ini.
  2. Jika hanya perlu di tab saat ini kita dapat menggunakan sesi jika tidak kita akan menambahkan beberapa kunci lagi ke view_history.
    mohon bimbingannya

Diperbaiki di # 10424.

Baru diuji ini, masih sama perilakunya. Menyegarkan halaman memperbaiki posisi tampilan halaman hanya jika file pdf tidak diubah, jika tidak, tampilan melompat ke halaman pertama. Ini sangat mudah untuk diuji dengan lateks, pilih kompilasi dokumen dan pratinjau pdf menambahkan kata acak di sumber lateks, kompilasi ulang dan pratinjau pdf, pratinjau pdfjs melompat ke halaman pertama. Saya pada rilis 2.2.191 di chrome. Akan memeriksa firefox ketika saya mendapat kesempatan.

Saya menguji dengan firefox, sepertinya pada rilis terbaru masalahnya sudah diperbaiki, jadi apakah hanya versi Chrome yang tertinggal?

Versi ekstensi Chrome menyertakan tambalan ini. Perilakunya mungkin berbeda karena perbedaan perilaku browser. Saya pernah memposting deskripsi rinci masalah di https://github.com/mozilla/pdf.js/commit/cdea75dc397f4eb4d6fd1f7d8a388c7d11df3452 (yang merupakan bagian dari https://github.com/mozilla/pdf.js/pull/6200) .

Saya mengirimkan masalah serupa # 11359 sehubungan dengan * pdf yang dihasilkan lateks. Sebenarnya tidak benar bahwa ini menggunakan "hash berdasarkan konten file" @ Rob - W. Sebaliknya, ini adalah ID yang disematkan dalam PDF setelah pembuatan, dan bagaimana ID itu dibuat bergantung pada aplikasi yang menghasilkan, untuk * lateks adalah hash berdasarkan kombinasi waktu saat ini dan nama jalur dari file-tex. Lihat komentar terakhir saya di sana untuk solusinya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

timvandermeij picture timvandermeij  ·  4Komentar

AlexP3 picture AlexP3  ·  3Komentar

dmisdm picture dmisdm  ·  3Komentar

zerr0s picture zerr0s  ·  3Komentar

smit-modi picture smit-modi  ·  3Komentar