PDF-documenten lezen en weergeven

Werken met onbewerkte PDF-documenten kan een tijdrovende en frustrerende taak zijn. In deze zelfstudie leert u hoe u de VFR-bibliotheek gebruikt om snel PDF-documenten in uw eigen toepassingen te openen, weer te geven en door te bladeren!

Invoering

Er zijn veel scenario's waarbij het nodig kan zijn om een ​​PDF weer te geven in een iOS-app. Daarbij kunnen er veel complicaties zijn bij het correct weergeven van PDF's. Er zijn ook extra functies zoals afdrukken, e-mailen, bladwijzers bekijken, rotatie afhandelen en meer waar rekening mee moet worden gehouden. Hoewel veel van deze functies niet ingewikkeld zijn om te gebruiken, kunnen sommige erg lastig zijn om correct te werken.

Stap 1: installeer de VFR-bibliotheek

Voor deze app beginnen we met het maken van een nieuw Xcode-project als een "Single-View Application". We zullen ook ARC gebruiken, dus zorg ervoor dat "Gebruik automatische referentietelling" is aangevinkt.

Vereiste frameworks

Onze PDF "Reader" -bibliotheek vereist een paar extra frameworks om aan ons project toe te voegen: QuartzCore, ImageIO en MessageUI.

Als u al bekend bent met het toevoegen van frameworks aan een project, dan kunt u dit volgende deel overslaan en direct naar "De bibliotheek toevoegen aan ons project" beginnen..

Anders, om die frameworks toe te voegen, klikt u op uw Project vanuit de Project Navigator. Kies uw doel en vind het tabblad 'Bouwfasen' bovenaan. Onder 'Fasen bouwen' vouwt u het gedeelte 'Binaire bibliotheken koppelen' uit en klikt u vervolgens op de knop '+' in de linkerbenedenhoek..

Voeg nu de vereiste frameworks toe (QuartzCore, ImageIO, MessageUI).

Uw "Link Binary Met Opties" -gedeelte zou er nu als volgt uit moeten zien:

De bibliotheek aan ons project toevoegen

Onze PDF "Reader" -bibliotheek kan hier worden gedownload van GitHub: https://github.com/vfr/Reader. We kunnen nu onze "Reader" -bibliotheek in ons project slepen en we zijn bijna klaar om te beginnen. Ik heb een nieuwe groep gemaakt in mijn project met de naam "PDF Reader", waar ik de bibliotheek toevoeg (u hoeft alleen de mappen "Sources" en "Graphics" op te nemen).

Helaas is "Reader" op dit moment niet ARC-gereed. Dus we zullen wat refactoring moeten doen. Er zijn drie (3) bestanden die we handmatig moeten bijwerken voordat we Xcode kunnen duiden op een refactor voor ARC: "ReaderDocument.m", "ReaderContentPage.m" en "ReaderThumbFetch.m" (ter referentie vindt u hier basisinstructies voor deze bestanden hier: http://www.vfr.org/2012/05/reader-arc-conversion/)

Kortom, wat we gaan doen is elk van deze bestanden bewerken om gewone __bridge-casts te gebruiken, zoals:

ReaderDocument.m:

Verandering

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

naar
…

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

ReaderContentPage.m:

Verandering

... = CGPDFDocumentCreateX ((CFURLRef) fileURL, zin);

naar…

... = CGPDFDocumentCreateX ((__ bridge CFURLRef) fileURL, phrase);

ReaderThumbFetch.m:

Verandering

... = CGImageSourceCreateWithURL ((CFURLRef) thumbURL,

naar…

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

Ga met de bovenstaande wijzigingen naar Bewerken> Refactor> Omzetten in C-doelstelling-C ...

U wordt gevraagd om "Selecteer doelen te converteren". Zorg ervoor dat uw huidige doel is geselecteerd en druk vervolgens op "Controleren".

De prompt zal je door het proces leiden, je zou gewoon moeten kunnen slaan "Next" zonder probleem.

Vervolgens kunt u "Wijzigingen bekijken" en kunt u selecteren "Opslaan".

Ten slotte moeten we de header van onze "Reader" -bibliotheek opnemen in onze hoofd ViewController.h en onze hoofdview-controller instellen als een ReaderViewControllerDelegate:

#import "ReaderViewController.h"

@interface MTViewController: UIViewController

Stap 2: instellen

Het ingewikkelde deel van onze projectopstelling is voorbij. Vanaf dit punt is het snel werken om PDF's te bekijken in onze apps -volledig met afdrukken, bladwijzers, miniaturen, e-mail en meer!

Laten we eerst een demo-PDF aan ons project toevoegen. Nogmaals, ik heb een nieuwe groep gemaakt, deze heb ik "PDF's" genoemd.

Ik heb vervolgens een PDF met de naam "typo_tips.pdf" toegevoegd die ik heb gedownload van fontshop.com in de "bronnenmap" die u kunt gebruiken (directe link). Uiteraard kunt u ook elke pdf proberen die u al heeft.

Om onze PDF te openen, voegen we een enkele UIButton toe in onze hoofd ViewController.xib.

We zullen dan onze UIButton aansluiten op een methode die we zullen noemen didClickOpenPDF.

De rest van het werk wordt afgehandeld met deze "didClickOpenPDF" -methode in onze hoofd ViewController.m.

Eerst pakken we ons PDF-document uit onze app-bundel.

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

Vervolgens maken we een "ReaderDocument" dat onze "Reader" kan bekijken. Merk op dat als ons document met een wachtwoord werd beveiligd, we het wachtwoord als de laatste parameter konden instellen.

 ReaderDocument * document = [ReaderDocument withDocumentFilePath: bestandswachtwoord: nihil];

Vervolgens zorgen we ervoor dat ons "ReaderDocument" met succes is gemaakt, voordat we onze "ReaderViewController" implementeren die de rest van de PDF-bewerkingen voor ons zal afhandelen..

 if (document! = nil) 

En tussen de accolades in de "document" -controle laden we ons "ReaderViewController" -object.

 if (document! = nil) ReaderViewController * readerViewController = [[ReaderViewController alloc] initWithReaderDocument: document]; readerViewController.delegate = zelf; 

In dit voorbeeld presenteren we onze "ReaderViewController" als een modale weergave, hoewel we deze alternatief kunnen presenteren met een UINavigationController als onze app een UINavigationController gebruikt. We hebben verschillende opties voor de stijl van presentatie en overgang die we zouden kunnen gebruiken voor onze ModalViewController, dus ik zou je willen aanmoedigen om te experimenteren met de stijlen die het beste werken voor je app. In dit geval proberen we de native Apple PDF-stijl te imiteren van iBooks.

Voeg de volgende regels toe na "readerViewController.delegate = self;".

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

Ten slotte moeten we onze ModalViewController daadwerkelijk presenteren:

 [self presentModalViewController: readerViewController geanimeerd: YES];

Zoals je ziet, is het relatief eenvoudig om PDF's in onze iOS-apps te bekijken en ermee te werken nadat we onze "Reader" -bibliotheek hebben opgenomen. Dit is de hele methode die we hebben gebruikt:

 - (IBAction) didClickOpenPDF: (UIButton *) afzender NSString * file = [[NSBundle mainBundle] pathForResource: @ "typo_tips" ofType: @ "pdf"]; ReaderDocument * document = [ReaderDocument withDocumentFilePath: bestandswachtwoord: nihil]; if (document! = nil) ReaderViewController * readerViewController = [[ReaderViewController alloc] initWithReaderDocument: document]; readerViewController.delegate = zelf; readerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; readerViewController.modalPresentationStyle = UIModalPresentationFullScreen; [self presentModalViewController: readerViewController geanimeerd: YES]; 

Als u onze applicatie nu start en bouwt, ziet u de vele functies die al werken voor uw PDF-viewer.

Er is slechts één laatste ding dat we moeten behandelen: onze PDF Reader ViewController afwijzen wanneer de gebruiker op de knop "Gereed" drukt.

Dit wordt afgehandeld met een eenvoudige, duidelijke methode:

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

Stap 3: Opties

Zoals eerder vermeld, ondersteunt de "Reader" -bibliotheek veel van deze functies dan alleen het tonen van PDF's, zoals afdrukken, bladwijzers, enz. Standaard zijn de meeste van deze functies ingeschakeld. U kunt er echter voor kiezen deze voor elke toepassing zo goed mogelijk in te stellen door het bestand "ReaderConstants.h" te bewerken. Elk van deze functies staat op de GitHub-pagina 'Reader', die ik hier zal laten zien:

  • READER_BOOKMARKS - Als TRUE, kan pagina-bladwijzer worden ondersteund.
  • READER_ENABLE_MAIL - Als TRUE wordt een e-mailknop toegevoegd aan de werkbalk
    (als het apparaat correct is geconfigureerd voor e-mailondersteuning).
  • READER_ENABLE_PRINT - Als TRUE wordt een afdrukknop toegevoegd aan de werkbalk
    (als afdrukken wordt ondersteund en beschikbaar is op het apparaat).
  • READER_ENABLE_THUMBS - Als TRUE wordt een duimenknop toegevoegd aan de werkbalk
    (navigatie van paginaminiaturen mogelijk maken).
  • READER_DISABLE_IDLE - Als TRUE is de iOS-inactieve timer uitgeschakeld terwijl
    een document bekijken (let op voor het leeglopen van de batterij).
  • READER_SHOW_SHADOWS - Als TRUE, wordt rond elke pagina een schaduw weergegeven
    en de inhoud van de pagina wordt ingevoegd door een paar extra punten.
  • READER_STANDALONE - Als FALSE is, wordt een knop "Gereed" toegevoegd aan de werkbalk
    en de -dismissReaderViewController: gedelegeerde methode wordt verzonden wanneer
    het wordt afgetapt.
  • READER_DISABLE_RETINA - Als TRUE, stelt de CATiledLayer contentScale in
    tot 1.0f. Hierdoor wordt de ondersteuning van het netvlies op effectieve wijze uitgeschakeld en resulteert dit in
    niet-retina-apparaat-rendering snelheden op apparaten voor retina-weergave op
    het verlies van de kwaliteit van de retina-weergave.

De volgende keer: PDF-documenten schrijven

Nu heb je gezien hoe gemakkelijk het kan zijn om PDF's in iOS te bekijken. In de volgende zelfstudie in deze serie zullen we enkele manieren bekijken om onze eigen PDF's in onze apps te maken.