Come Integrare un visualizzatore PDF in HTML5 Apps Applicazioni HTML5 offrono molti dei vantaggi rispetto a quelle native. Applicazioni Web sono • Naturalmente cross-platform: sviluppare una volta, eseguito su iOS, Android, Windows Phone e tutto il resto. • Facile da aggiornare l'app per tutti, immediatamente. • Non c'è bisogno di passare attraverso Apple o Google per accedere ai clienti (ma si può ancora incorporando in un guscio app nativa) Ma le applicazioni web subiscono un grosso problema, e questo è l'esperienza dell'utente. Oggi, nel 2013, anche le applicazioni web mobile best-artigianale sono neanche lontanamente la qualità dell'esperienza delle migliori applicazioni native. Infatti, con ma poche eccezioni, le migliori applicazioni web mobile oggi ancora non si avvicinano alla qualità del primo lotto di applicazioni native per iPhone a partire dal 2007. - John Gruber, Daring Fireball Un settore della user experience in cui le applicazioni HTML5 sono stati storicamente debole è nella loro capacità di visualizzare un file PDF all'interno della app. Per lungo tempo, "la visione", un PDF sul web significava scaricarlo e aprirlo in un programma diverso. Avanti venuto plugin del browser in formato PDF, che avrebbe preso sopra la schermata del browser al fine di visualizzare il PDF. Un piccolo miglioramento, ma ancora non integrati e non certo una buona esperienza utente. Quindi, se l'obiettivo è quello di integrare la visualizzazione PDF in una web app, come può essere fatto? Ci sono un certo numero di approcci, ciascuno con vantaggi e svantaggi. Continua a leggere per vedere quello che esistono tecniche, e che potrebbe essere migliore per la vostra applicazione. 1. Rasterizzazione di immagini Questo è probabilmente il modo più semplice per ottenere "PDF" sul web. Prendete il PDF, trasformarlo in immagini , servire. Voila. PDF sul web in un formato che è compatibile con tutti i browser su tutti i sistemi operativi. Tuttavia, ci sono alcuni problemi: • Nessun vettore limiti contenuti di qualità ad alte risoluzioni, • Conservazione e dati bitmap banda pesante, • Non supporta funzionalità di PDF come forme o un metodo standard di annotazioni, ha bisogno di lavoro supplementare per simulare la selezione del testo • Problemi di scalabilità: computazionalmente costosi per rasterizzare, i requisiti di storage di grandi dimensioni, • Richiede lavoro extra per implementare la selezione del testo e indexability. Mentre la conversione di immagini può essere una buona soluzione per alcune applicazioni, è improbabile che sia quella ottimale. Che cosa possiamo fare? 2. DOM HTML L'idea è quella di utilizzare il rendering del testo originario del browser e lo strato in cima un'immagine che contiene tutti i dati non di testo. (Questa tecnica viene implementata da PDFTron in pdfton.PDF.Convert.ToHtml () ). Mentre suona come una variazione incrementale dalla piena rasterizzazione, ci sono alcuni vantaggi significativi: • La qualità del testo è spesso conservata. Le persone sono particolarmente sensibili alla qualità del testo, preservando la natura vettore dei glifi è un grande miglioramento. • Consente all'utente di utilizzare le funzionalità di selezione del browser standard di testo / copia, che possono anche essere letti da robot dei motori di ricerca. Così, mentre questo è un passo avanti rispetto pieno rasterizzazione, problemi rimangono: • Di qualità per gli elementi non testuali è sacrificato per tutti i dati non di testo. • Posizionamento del testo accurato è possibile, ma richiede una <span> separato per ogni lettera. In questo modo si riduce la velocità di caricamento della pagina e la capacità di ricerca / index / select text. Quindi bisogna accettare questa limitazione, o invece accettare posizionamento del testo un po 'imprecisa. • Degrada alla piena rasterizzazione PDF quando il testo è semi-trasparente, parzialmente occluso o coperto da oggetti trasparenti, oggetti modello pieno, ecc • E 'facile per gli utenti di salvare i contenuti DOM a livello locale, che è un problema se il contenuto di copyright servire. • I requisiti di archiviazione potrebbero essere significative 3. SVG Il W3C ha riconosciuto la necessità di portare la grafica vettoriale di alta qualità per il web, e ha proposto SVG (Scalable Vector Graphics). In un primo momento, questa tecnologia sembra molto promettente: sarà fornire i dati vettoriali e posizionamento preciso che vogliamo, con font, gradienti, maschere e altro ancora. A "PDF killer" alcuni predetto. PDFTron è intervenuta e ha sviluppato il primo convertitore da PDF a SVG nel 2001. Tuttavia, l'adozione diffusa di SVG e soppiantare del PDF non è mai venuto a passare. Perché no? Qui ci sono alcuni motivi: • SVG non è completamente compatibile con il modello grafico PDF (es. trasparenza modalità / fusione), rendendo impossibile riprodurre fedelmente i contenuti PDF utilizzando SVG. • A spec gonfio progettato per competere anche con Flash, incorporando scripting e animazione, mettere un peso elevato per coloro che desiderano implementare completamente le specifiche. • Manca il supporto per la compressione monocromatica efficiente, che è importante per molti documenti aziendali scansionati. • Peggio di tutto, la maggior parte delle implementazioni erano incomplete e buggy. Fino IE9, Microsoft non ha il supporto SVG a tutti, e anche adesso non c'è il supporto per i font SVG. In altri browser (Chrome, Firefox) ci sono molti difetti legati al posizionamento del testo. SVG aveva alcune costruite in limiti tecnici, ma il suo più grande problema era (ed è tuttora) una mancanza di implementazioni completi e corretti nel browser. Alla fine ha trovato il successo in alcune nicchie, ma non ha sperimentato l'adozione diffusa di casi d'uso generale. 4. HTML5 Canvas Allora da dove viene, che ci lascia? Non sorprende, ci accingiamo a dare un'occhiata da vicino al "HTML5", in particolare la tela. Fa questa tecnologia finalmente consegnare la possibilità di visualizzare una linea PDF? Sarà riuscire dove altri sono venuto a breve? L'HTML5 Canvas ci offre funzionalità di disegno 2D simile a una libreria di livello di sistema come GDI e Direct2D su Windows e Quartz su OS X e iOS. Ciò significa che le forme, le curve, testo e opacità possono essere rappresentate matematicamente, e resi dalla tela a qualsiasi risoluzione. Così la grande domanda è: possiamo "tradurre" la rappresentazione matematica di contenuti in un PDF per una serie di comandi Javascript che li attirano l'HTML5 Canvas. Diamo uno sguardo. PDF → codice JS → HTML5 Canvas: pdf.js Il "Sacro Graal" sarebbe quella di utilizzare JavaScript per leggere direttamente un PDF e disegnare su una tela HTML5. Ciò offrirebbe una serie di vantaggi: • Grafica vettoriale • Render il PDF direttamente anziché utilizzare un formato intermedio (come immagini o SVG) • Non sarebbe soffrono di limitazioni delle tecniche precedentemente descritte • Comportamento coerente tutti i browser Costruire un tale sistema sembrare un compito importante, ma è in realtà stato tentato dalla Mozilla Foundation in pdf.js . Pdf.js è un impressionante prestazione tecnica, ma un attento esame porta a concludere che soffre, purtroppo, da molte usabilità e problemi di qualità. Questo non è un riflesso di pdf.js di per sé, ma piuttosto una limitazione tecnica che sarebbe insita in ogni prodotto che ha tentato di utilizzare Javascript/HTML5 per rendere un PDF. Alcuni dei problemi che abbiamo incontrato: 1. Precisione Dalle pdf.js 'get-go' affrontato le questioni sul lato rendering. Ad esempio, standard HTML5 Canvas non supporta i percorsi con i trattini, la regola di riempimento pari-dispari, o metodi di fusione PDF. Poiché gli sviluppatori di Mozilla avevano il controllo del proprio browser che erano in grado di fasciare Firefox con estensioni personalizzate (con prefisso moz-...). Purtroppo queste estensioni non sono parte dello standard HTML5 e non sono supportate da tutti i browser, compresi i browser mobili dominanti. Inoltre, anche con tutta la consuetudine moz estensioni, 'pdf.js' non può trattare con alcuni gruppi di trasparenza, sovrastampa, alcune maschere morbide, spazi colore non RGB, ecc Forse un giorno tutti i browser aggiungerà tutte le estensioni necessarie per precisione il rendering di un PDF, ma il progetto ha mostrato chiaramente alcune limitazioni di attuazione di un sistema grafico complesso in JS. pdf.js rendering rendering corretto pdf.js rendering corretto il rendering PDF 2. Prestazione JavaScript è molto più lento di codice nativo . Nonostante l'uso di GPU accelerata di rendering tela, visualizzazione dei documenti PDF in pdf.js è più lento di nativi spettatori / plug-in che non utilizzano l'accelerazione hardware. Spettatori nativi saranno sempre in grado di rimanere un passo avanti di telespettatori JavaScript in termini di prestazioni. 3. Affidabilità Browser per cellulari non rispondono bene quando sono a corto di memoria: semplicemente escono, cioè crash. Perché i documenti PDF possono essere di grandi dimensioni e utilizzare le risorse complesse non è difficile superare il limite. (Le stesse questioni sul tavolo, ma grazie a grandi quantità di RAM e memoria virtuale, sono meno critici.) 4. Usabilità Perché pdf.js utilizza documenti PDF 'come è', è più probabile che no che i documenti non sono stati "linearizzata", che viene salvato in un formato che è in streaming sul web. Ciò significa che l'intero documento deve essere scaricato (e memorizzato) prima che possa essere reso, lasciando l'attesa dell'utente. Anche se questo problema non è specifico di un visualizzatore Javascript, è un inconveniente di utilizzare documenti PDF che non sono stati trasformati per la visualizzazione online. Una soluzione: codice PDF PDFNet → → → JS HTML5: WebViewer Cosa si può fare per risolvere queste carenze? Quando si guarda la fonte dei problemi, è che i documenti PDF possono essere semplicemente troppo grande e complesso per essere gestito con competenza da una soluzione JavaScript/HTML5 Canvas puro. Così, forse con un po 'di preelaborazione, un file PDF può essere normalizzata con un formato che può essere adeguatamente gestito da un puro JavaScript / HTML 5 Canvas spettatore. Cosa deve essere fatto? • Ottimizzare il file per un veloce accesso casuale carico. Questo significa che ogni pagina possa essere recuperato e visualizzato a prescindere da quale altre pagine del documento sono già stati scaricati. • Downsampling immagini ad alta risoluzione in modo che non consumano grandi quantità di memoria, che è un problema reale sui dispositivi mobili. • Ridurre la complessità di un documento per la visualizzazione accurata ed efficiente su dispositivi mobili. Ciò significa analizzare un elemento elemento per pagina PDF, in cerca di semplificazioni e mezzi alternativi di rappresentare contenuti che è noto per essere compatibile con HTML5 Canvas. Questo può anche significare contenuto rasterizzazione che non può in alcun modo essere resa con precisione da un HTML5 Canvas. • Normalizza tutte le immagini in una forma che può essere decodificato in modo nativo da un browser Così come bene fa questo lavoro? Dopo 3 + anni di attuazione di tali ottimizzazioni per Visualizzatore Web , siamo in grado di dire che funziona davvero molto bene. Una volta che il PDF è stato ottimizzato per la visualizzazione web, tutte le carenze d 'pdf.js scioglie, e la visualizzazione è • • • • • veloce affidabile alta qualità cross-browser mobile-friendly Questi documenti ottimizzati hanno anche servito come una buona base per l'attuazione funzionalità PDF come moduli interattivi e annotazioni. Conclusioni Visualizzazione di un PDF all'interno di un browser web non è affatto banale. Ciò che è chiaro è che per la visualizzazione precisa e affidabile, il PDF ha bisogno di essere "normalizzato" per una rappresentazione web amichevole. Alcuni metodi di normalizzazione, come la conversione di immagini, funzionano, ma con limitazioni. Normalizzazione sofisticati, come quello che viene fatto per Visualizzatore Web , offrono un'esperienza che si avvicina a quella di un visualizzatore PDF nativo.
© Copyright 2024 ExpyDoc