Lesen und Anzeigen von PDF-Dokumenten

Die Arbeit mit rohen PDF-Dokumenten kann eine zeitraubende und frustrierende Aufgabe sein. In diesem Lernprogramm erfahren Sie, wie Sie mit der VFR-Bibliothek schnell auf PDF-Dokumente in Ihren eigenen Anwendungen zugreifen, sie anzeigen und anzeigen können!

Einführung

In vielen Szenarien kann es erforderlich sein, ein PDF in einer iOS-App anzuzeigen. Dabei kann es sehr kompliziert sein, wenn PDFs korrekt gerendert werden. Es gibt auch zusätzliche Funktionen wie Drucken, E-Mail-Versand, Anzeigen von Lesezeichen, Handhabung der Rotation und vieles mehr, die berücksichtigt werden sollten. Viele dieser Funktionen sind zwar möglicherweise nicht kompliziert zu integrieren, einige können jedoch sehr schwierig sein, um korrekt zu arbeiten.

Schritt 1: Installieren Sie die VFR-Bibliothek

Für diese App erstellen wir zunächst ein neues Xcode-Projekt als "Single-View-Anwendung". Wir werden auch ARC verwenden. Stellen Sie daher sicher, dass "Automatische Referenzzählung verwenden" aktiviert ist.

Erforderliche Frameworks

Unsere PDF-Reader-Bibliothek erfordert einige zusätzliche Frameworks, die zu unserem Projekt hinzugefügt werden müssen: QuartzCore, ImageIO und MessageUI.

Wenn Sie bereits mit dem Hinzufügen von Frameworks zu einem Projekt vertraut sind, können Sie diesen nächsten Teil überspringen und direkt mit "Hinzufügen der Bibliothek zu unserem Projekt" beginnen..

Wenn Sie diese Frameworks hinzufügen möchten, klicken Sie im Projektnavigator auf Ihr Projekt. Wählen Sie Ihr Ziel und finden Sie oben die Registerkarte "Erstellungsphasen". Erweitern Sie unter "Build-Phasen" den Abschnitt "Verknüpfen von Binärdateien mit Bibliotheken" und klicken Sie auf die Schaltfläche "+" in der linken unteren Ecke.

Fügen Sie nun die erforderlichen Frameworks hinzu (QuartzCore, ImageIO, MessageUI)..

Ihr Abschnitt "Binär mit Optionen verknüpfen" sollte jetzt so aussehen:

Hinzufügen der Bibliothek zu unserem Projekt

Unsere PDF "Reader" -Bibliothek kann von GitHub hier heruntergeladen werden: https://github.com/vfr/Reader. Wir können jetzt unsere "Reader" -Bibliothek in unser Projekt ziehen und sind fast fertig. Ich habe in meinem Projekt eine neue Gruppe mit dem Namen "PDF Reader" erstellt, in der ich die Bibliothek hinzufüge (Sie müssen nur die Verzeichnisse "Sources" und "Graphics" hinzufügen)..

Leider ist "Reader" an diesem Punkt nicht ARC-ready. Also müssen wir ein wenig Refactoring durchführen. Es gibt drei (3) Dateien, die wir manuell aktualisieren müssen, bevor Xcode für ARC umgestaltet werden kann: "ReaderDocument.m", "ReaderContentPage.m" und "ReaderThumbFetch.m" (als Referenz können Sie finden.) grundlegende Anweisungen für diese Dateien hier: http://www.vfr.org/2012/05/reader-arc-conversion/.)

Grundsätzlich bearbeiten wir jede dieser Dateien, um einfache Brückenmodelle zu verwenden.

ReaderDocument.m:

Veränderung

… = [NSString stringWithString: (id) theString];

zu…

= [NSString stringWithString: (__ bridge id) theString];

ReaderContentPage.m:

Veränderung

… = CGPDFDocumentCreateX ((CFURLRef) fileURL, Phrase);

zu…

… = CGPDFDocumentCreateX ((__ bridge CFURLRef) fileURL, Phrase);

ReaderThumbFetch.m:

Veränderung

… = CGImageSourceCreateWithURL ((CFURLRef) thumbURL,

zu…

… = CGImageSourceCreateWithURL ((__ bridge CFURLRef) thumbURL, NULL);

Gehen Sie zu den oben genannten Änderungen zu Bearbeiten> Refactor> In Objective-C ARC konvertieren…

Sie werden aufgefordert, "Zu konvertierende Ziele auswählen". Stellen Sie sicher, dass Ihr aktuelles Ziel ausgewählt ist, und drücken Sie dann "Prüfen".

Die Eingabeaufforderung führt Sie durch den Prozess, Sie sollten es einfach treffen können "Nächster" ohne Ausgabe.

Dann können Sie "Änderungen überprüfen" auswählen und auswählen "Sparen".

Schließlich müssen wir unseren "Reader" -Bibliothekheader in unsere Hauptansicht "ViewController.h" aufnehmen und unseren Hauptansichtscontroller als "" festlegen ReaderViewControllerDelegate:

#import "ReaderViewController.h"

@interface MTViewController: UIViewController

Schritt 2: Setup

Der komplizierte Teil unseres Projektaufbaus ist vorbei. Ab diesem Zeitpunkt können Sie schnell PDF-Dateien in unseren Apps anzeigen, einschließlich Drucken, Lesezeichen, Miniaturansichten, E-Mail und mehr!

Als erstes fügen wir unserem Projekt ein Demo-PDF hinzu. Wieder einmal habe ich eine neue Gruppe erstellt, diese habe ich "PDFs" genannt..

Ich habe dann eine PDF-Datei mit dem Namen "typo_tips.pdf" hinzugefügt, die ich von fontshop.com in das "Ressourcenverzeichnis" heruntergeladen habe, das Sie verwenden können (direkter Link). Natürlich können Sie auch jedes vorhandene PDF ausprobieren.

Um unser PDF zu öffnen, fügen wir ein einzelnes UIButton in unserer Hauptansicht von ViewController.xib hinzu.

Dann verbinden wir unser UIButton mit einer Methode, die wir aufrufen didClickOpenPDF.

Der Rest der Arbeit wird innerhalb dieser "didClickOpenPDF" -Methode in unserem Haupt-ViewController.m abgewickelt.

Zuerst holen wir uns unser PDF-Dokument aus unserem App-Paket.

 NSString * file = [[NSBundle mainBundle] pathForResource: @ "typo_tips" ofType: @ "pdf"];

Als Nächstes erstellen wir ein "ReaderDocument", das unser "Reader" anzeigen kann. Wenn unser Dokument kennwortgeschützt ist, können Sie das Kennwort als endgültigen Parameter festlegen.

 ReaderDocument * document = [ReaderDocument withDocumentFilePath: Dateipasswort: nil];

Als Nächstes stellen wir sicher, dass unser "ReaderDocument" erfolgreich erstellt wurde, bevor wir unseren "ReaderViewController" implementieren, der die restlichen PDF-Vorgänge für uns erledigt.

 if (Dokument! = Null) 

Und zwischen den Klammern in der "Dokument" -Kontrolle laden wir unser "ReaderViewController" -Objekt.

 if (document! = nil) ReaderViewController * readerViewController = [[ReaderViewController-Zuordnung] initWithReaderDocument: document]; readerViewController.delegate = self; 

In diesem Beispiel präsentieren wir unseren "ReaderViewController" als modale Ansicht, obwohl wir ihn alternativ mit einem UINavigationController präsentieren könnten, wenn unsere App einen UINavigationController verwendet. Wir haben verschiedene Optionen für den Präsentations- und Übergangsstil, die wir für unseren ModalViewController verwenden könnten. Ich möchte Sie daher dazu ermutigen, mit den für Ihre App am besten geeigneten Styles zu experimentieren. In diesem Fall versuchen wir, den nativen Apple PDF-Stil von iBooks zu imitieren.

Fügen Sie die folgenden Zeilen nach "readerViewController.delegate = self;".

 readerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; readerViewController.modalPresentationStyle = UIModalPresentationFullScreen;

Zum Schluss müssen wir unseren ModalViewController tatsächlich präsentieren:

 [self presentModalViewController: readerViewController animiert: JA];

Wie Sie sehen, ist es nach dem Einbinden unserer "Reader" -Bibliothek relativ einfach, PDFs in unseren iOS-Apps anzuzeigen und mit ihnen zu interagieren. Hier ist die gesamte Methode, die wir verwendet haben:

 - (IBAction) didClickOpenPDF: (UIButton *) Absender NSString * file = [[NSBundle mainBundle] pathForResource: @ "typo_tips" ofType: @ "pdf"]; ReaderDocument * document = [ReaderDocument withDocumentFilePath: Dateipasswort: nil]; if (document! = nil) ReaderViewController * readerViewController = [[ReaderViewController-Zuordnung] initWithReaderDocument: document]; readerViewController.delegate = self; readerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; readerViewController.modalPresentationStyle = UIModalPresentationFullScreen; [self presentModalViewController: readerViewController animiert: JA]; 

Wenn Sie unsere Anwendung jetzt ausführen und erstellen, sehen Sie die vielen Funktionen, die bereits für Ihren PDF-Viewer funktionieren.

Es gibt nur eine letzte Sache, die wir erledigen müssen: unseren PDF Reader ViewController zu schließen, wenn der Benutzer die Schaltfläche "Fertig" drückt.

Dies wird mit einer einfachen und unkomplizierten Methode erledigt:

 - (void) dismissReaderViewController: (ReaderViewController *) viewController [self dismissModalViewControllerAnimated: YES]; 

Schritt 3: Optionen

Wie bereits erwähnt, unterstützt die "Reader" -Bibliothek viele dieser Funktionen über das Anzeigen von PDFs hinaus, z. B. Drucken, Lesezeichen usw. Die meisten dieser Funktionen sind standardmäßig aktiviert. Sie können jedoch festlegen, dass diese jeweils für Ihre Anwendung am besten geeignet sind, indem Sie die Datei "ReaderConstants.h" bearbeiten. Jede dieser Funktionen ist auf der GitHub-Seite "Reader" aufgeführt, die ich hier zeigen werde:

  • READER_BOOKMARKS - Wenn TRUE, wird die Unterstützung für Seitenlesezeichen aktiviert.
  • READER_ENABLE_MAIL - Bei TRUE wird der Symbolleiste eine E-Mail-Schaltfläche hinzugefügt
    (wenn das Gerät für die E-Mail-Unterstützung ordnungsgemäß konfiguriert ist).
  • READER_ENABLE_PRINT - Wenn TRUE, wird der Symbolleiste eine Druckschaltfläche hinzugefügt
    (wenn das Drucken unterstützt wird und auf dem Gerät verfügbar ist).
  • READER_ENABLE_THUMBS - Bei TRUE wird der Symbolleiste eine Daumenschaltfläche hinzugefügt
    (Ermöglicht die Navigation von Seitenminiaturdokumenten).
  • READER_DISABLE_IDLE - Bei TRUE ist der iOS-Leerlauf-Timer deaktiviert
    Anzeigen eines Dokuments (Vorsicht vor Batterieentzug).
  • READER_SHOW_SHADOWS - Bei TRUE wird um jede Seite ein Schatten angezeigt
    und der Seiteninhalt wird durch ein paar zusätzliche Punkte eingefügt.
  • READER_STANDALONE - Bei FALSE wird der Symbolleiste eine Schaltfläche "Fertig" hinzugefügt
    und die Delegierungsmethode -dismissReaderViewController:
    es wird angezapft.
  • READER_DISABLE_RETINA - Wenn TRUE, wird CATiledLayer contentScale festgelegt
    bis 1,0f. Dies deaktiviert die Netzhautunterstützung effektiv und führt zu
    Nicht-Retina-Gerät Rendering-Geschwindigkeiten auf Retina-Anzeigegeräten bei
    der Verlust der Retina-Anzeigequalität.

Nächstes Mal: ​​PDF-Dokumente schreiben

Jetzt haben Sie gesehen, wie einfach es ist, PDFs in iOS anzuzeigen. Im nächsten Tutorial dieser Serie werden einige Möglichkeiten beschrieben, wie Sie unsere eigenen PDFs in unseren Apps erstellen können.