In letzter Zeit gab es viele Fragen zum Zeichnen von PDFs.
Ja, Sie können PDFs sehr einfach mit einem UIWebView
aber das kann nicht die Leistung und Funktionalität bieten, die Sie von einem guten PDF-Viewer erwarten würden.
Sie können eine PDF-Seite zeichnen zu einer CAL-Schicht o zu einem UIImage . Apple hat sogar Beispielcode, der zeigt, wie man eine große PDF-Datei zeichnet. in einer zoombaren UIScrollview
Aber die gleichen Probleme tauchen immer wieder auf.
UIImage-Methode:
- PDF's in einem
UIImage
optisch nicht so gut skalieren wie ein Layer-Ansatz. - Die CPU- und Speicherbelastung bei der Erzeugung von der
UIImages
de unPDFcontext
begrenzt/verhindert die Verwendung zur Erstellung eines Echtzeit-Rendering von neuen Zoomstufen.
CATiledLayer-Methode:
- Es gibt einen erheblichen Overhead (Zeit) das Zeichnen einer ganzen PDF-Seite in ein
CALayer
Einzelne Kacheln können gerendert werden (sogar mit einer tileSize-Änderung) CALayers
c vorbereitet werden (wird außerhalb des Bildschirms gerendert).
Auch PDF-Viewer sind in der Regel recht speicherintensiv. Überprüfen Sie sogar den Speicherverbrauch von Apples zoombarem PDF-Beispiel.
In meinem aktuellen Projekt entwickle ich einen PDF-Viewer und rendere eine UIImage
einer Seite in einem separaten Thema (auch hier!) und deren Darstellung bei einem Maßstab von x1. CATiledLayer
Das Rendering setzt ein, sobald die Skalierung >1 ist. iBooks verfolgt einen ähnlichen Ansatz, denn wenn Sie durch die Seiten blättern, sehen Sie eine Version mit geringerer Auflösung für weniger als eine Sekunde, bevor eine scharfe Version erscheint.
Im Rendering 2 Seiten jede Seite der Seite im Fokus, so dass das PDF-Bild bereit ist, die Ebene zu maskieren, bevor es beginnt drawing.Pages sind wieder zerstört, wenn sie +2 Seiten von der fokussierten Seite entfernt sind.
Hat irgendjemand irgendwelche Erkenntnisse, egal wie klein oder offensichtlich, um die Leistung/Speicherhandhabung von Drawing PDF's zu verbessern? oder irgendwelche anderen hier diskutierten Probleme?
EDITAR: Einige Tipps (Credit- Luke Mcneice,VdesmedT,Matt Gallagher,Johann):
-
Speichern Sie alle Medien auf der Festplatte, wenn Sie können.
-
Verwenden Sie größere tileSizes, wenn Sie auf TiledLayers rendern
-
init häufig verwendete Arrays mit Platzhalterobjekten, alternativ dazu ist ein anderer Gestaltungsansatz diese
-
Beachten Sie, dass Bilder schneller gerendert werden als eine
CGPDFPageRef
-
使用方法
NSOperations
oder GCD & Blöcke zur Vorbereitung von Seiten im Voraus der Zeit vorzubereiten. -
aufrufen
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh); CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);
vorCGContextDrawPDFPage
um die Speichernutzung beim Zeichnen zu reduzieren -
Ihre Initiation
NSOperations
mit einer docRef ist eine schlechte Idee (Speicher), wrap die docRef in ein Singleton. -
Unnötiges stornieren
NSOperations
Wenn es möglich ist, vor allem wenn sie Speicherplatz benötigen, sollten Sie sich davor hüten, Kontexte offen zu lassen! -
Recyceln von Seitenobjekten und Zerstören unbenutzter Ansichten
-
Schließen Sie alle offenen Kontexte, sobald Sie sie nicht mehr benötigen
-
beim Erhalt von Speicherwarnungen das DocRef und alle Seiten-Caches freigeben und neu laden
Andere PDF-Funktionen:
-
Links innerhalb einer PDF-Datei erhalten (und aquí y aquí )
-
Das Ziel des Links ermitteln (Abrufen der Seitenzahl aus der
/Dest
Array)
-
Rohtext abrufen (und aquí y Hier y aquí (Positionierung fokussiert))
-
Suche auf (und aquí ) (funktioniert nicht mit allen PDFs (einige zeigen nur seltsame Zeichen an, ich vermute, es ist ein Kodierungsproblem, aber ich bin mir nicht sicher) -Credit BrainFeeder)
-
CALayer und Off-Screen-Rendering - Rendering der nächsten Seite für schnelle/flüssige Anzeige
Dokumentation
- Quartz PDFObjects (Wird für Metainformationen, Anmerkungen und Daumen verwendet)
- Abobe PDF-Spezifikation
Beispielhafte Projekte
- Apple/ZoomingPDF - zoomen,
UIScrollView
,CATiledLayer
- vfr/ leser - Zoomen, Blättern,
UIScrollView
,CATiledView
- Stirn/ Blätter - Blättern mit schönen Übergängen
- / abschöpfen - alles, wie es scheint (PDF-Reader/Editor für OSX)