reactjs - React PDF Viewer-biblioteket kan ikke gjengi den første siden så snart minimumskravet er lastet ned


Jeg bruker react-pdf-viewer 3.9.0 med "pdfjs-dist": "2.15.349".

Det ser ut som React PDF Viewer fortsatt venter til det laster ned hele filen, i stedet for å gjengi den første siden så snart minimumskravet er lastet ned (fast web-visning, eller lineariseringsteknologi). Filene mine er allerede linearisert (byte-strømming), og jeg vil gjerne gjengi den første siden, selv om filen fremdeles lastes ned. Jeg ville sette pris på enhver veiledning om hvordan man kan løse dette! Tusen takk!

Svar #1

Historie

Fra Chromium-feilsporing og dialoger

Adobe inkluderer spesielle ledetråder i strømmen i deres linjerte PDF-filer. Formatet på en slik strøm er en svart boks og forstås kun av Adobe-programvare. Dette gjør at Adobe kan laste linjerte PDF-filer mer effektivt.

Alternativet er server delvise byteranger. Chromium-feil for lesing og endring ble åpnet i 2011, angivelig i 2014 la Adobe ut (kilde ikke lenger på Adobe-nettstedet) noe i retning av indikere at Google Chrome ikke støtter byteserving av en PDF. Den feilen er fortsatt åpen, mens andre relaterte ble lukket "Vil ikke fikse"

Dermed er begge metodene problematiske for Foxit/Skia (Chromes binære utviklere) og andre tredjepartsaktører å emulere. Prøv denne 2GB-lenken i Acrobat, den bør åpne side 1 før nedlasting. Chrome må vente på hele nedlastingen! Selv om den er lastet ned! Min Edge forventer å lagre den om cirka 10 minutter. https://s3.amazonaws.com/pdftron/downloads/pl/2gb-sample-file.pdf

En kommersiell løsning :- (Noen sekunder for å vise filen deres)

PDFTron (moderselskap for Iceni, iText, PDFLib, XODO og mange andre) PDF.js mer spesifikt en "Forhåndslastet" Express kan

  • Bruk Adobe lineariserte PDF-filer
  • Bruk Adobe byte "Range Request"-tjenester rfc7233#section-2.1

Firefox/Mozilla bruker enklere JavaScript-metodikker

Det kan variere om Firefox-viseren kan bruke lineæriserte filer, en av mine eldre legacy-visere fungerer ikke med det eksemplet, men den nyere innebygde Firefox-aktivatoren gjør det.

Uklart om noen av dem kan passeres gjennom Mozilla PDF.js-baserte React PDF Viewer, men antagelig var det mulig fra og med versjon 3.3.3. Imidlertid viser utviklerversjonen som er lenket ovenfor, ikke denne oppførselen når man bruker enkel åpning av filer som ikke er servert, for eksempel "dra og slipp". Den første siden vises derimot raskt (sammen med andre) etter tiden det tar å laste opp.

MERK: en "/Linearized" PDF-fil må ikke ha blitt "tilpasset", f.eks. annotert eller bare servert (annet enn som transkodet tekst) osv. etter "Web-optimalisering". Viseren må arbeide med de desimaladresserte binærfilbytene fra serveren.

Relaterte artikler