Läser och visar PDF-dokument

Att arbeta med raw PDF-dokument kan vara en tidskrävande och frustrerande uppgift. Denna handledning lär dig hur du använder VFR-biblioteket för att snabbt komma åt, visa och bläddra i PDF-dokument i dina egna applikationer!

Introduktion

Det finns många scenarier där det kan bli nödvändigt att visa en PDF i en iOS-app. Därigenom kan det finnas många komplikationer för att få PDF-filer att göra korrekt. Det finns också ytterligare funktioner som utskrift, e-post, visning av bokmärken, hanteringsrotation och mer som ska redovisas. Medan många av dessa funktioner kanske inte är komplicerade att inkludera kan vissa vara mycket knepiga för att fungera korrekt.

Steg 1: Installera VFR-biblioteket

För den här appen börjar vi genom att skapa ett nytt Xcode-projekt som ett "Enkelt visningsprogram". Vi använder också ARC, så se till att "Använd automatisk referensräkning" är markerad.

Obligatoriska ramar

Vårt PDF-läsarbibliotek kräver några ytterligare ramar som ska läggas till i vårt projekt: QuartzCore, ImageIO och MessageUI.

Om du redan är känd för att lägga till ramar till ett projekt, kan du hoppa över den här nästa delen och gå direkt till "Lägga till biblioteket i vårt projekt".

Annars, för att lägga till de här ramarna klickar du på ditt projekt från Project Navigator. Välj ditt mål och hitta sedan fliken "Bygga faser" längst upp. Under "Build Phases", expandera "Link Binary With Libraries" och klicka sedan på "+" knappen i nedre vänstra hörnet.

Lägg nu till de nödvändiga ramarna (QuartzCore, ImageIO, MessageUI).

Din "Länk binär med alternativ" avsnittet ska nu se ut så här:

Lägga biblioteket till vårt projekt

Vårt PDF-läsare bibliotek kan laddas ner från GitHub här: https://github.com/vfr/Reader. Vi kan nu dra vårt "Reader" -bibliotek i vårt projekt och vi är nästan redo att börja. Jag har skapat en ny grupp i mitt projekt som heter "PDF Reader" där jag lägger till biblioteket (du behöver bara inkludera katalogerna "Källor" och "Grafik").

Tyvärr är "Reader" inte just nu ARC-klar. Så, vi måste göra några refactoring. Det finns tre (3) filer som vi måste uppdatera manuellt innan vi kan berätta för Xcode att refactor för ARC: "ReaderDocument.m", "ReaderContentPage.m" och "ReaderThumbFetch.m" (för referens kan du hitta grundläggande instruktioner för dessa filer här: http://www.vfr.org/2012/05/reader-arc-conversion/.)

I grund och botten är det vi ska göra, redigera var och en av dessa filer för att använda vanliga __bridge-gjutningar, så här:

ReaderDocument.m:

Byta

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

till ...

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

ReaderContentPage.m:

Byta

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

till…

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

ReaderThumbFetch.m:

Byta

... = CGImageSourceCreateWithURL ((CFURLRef) thumbURL,

till…

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

Med ovanstående ändringar gjorda, gå till Redigera> Refactor> Konvertera till Objective-C ARC ...

Du kommer att uppmanas att välja "Välj mål att konvertera". Kontrollera att ditt aktuella mål är valt och tryck sedan på "Kontrollera".

Snabbguide kommer att styra dig genom processen, du borde bara kunna träffa "Nästa" utan problem.

Då kan du "Granska ändringar", och du kan välja "Spara".

Slutligen måste vi inkludera vår "Reader" -bibliotekshuvud i vår huvudsakliga ViewController.h och ställa in vår huvudvisningskontroll som en ReaderViewControllerDelegate:

#import "ReaderViewController.h"

@interface MTViewController: UIViewController

Steg 2: Inställning

Den komplicerade delen av vår projektinställning är över. Från det här ögonblicket är det snabbt att börja visa PDF-filer i våra appar - komplett med utskrift, bokmärken, miniatyrbilder, e-post och mer!

Först, låt oss lägga till en demo PDF till vårt projekt. Återigen har jag skapat en ny grupp, den här jag har kallat "PDF-filer".

Jag har sedan lagt till en PDF med namnet "typo_tips.pdf" som jag hämtade från fontshop.com i "Resurs katalog" som du kan använda (direktlänk). Självklart kan du prova någon PDF som du redan har.

För att öppna vår PDF lägger vi till en enda UIButton i vår huvudsakliga ViewController.xib.

Vi kopplar sedan upp vår UIButton till en metod som vi ringer didClickOpenPDF.

Resten av arbetet kommer att hanteras inom denna "didClickOpenPDF" -metod i vår huvudsakliga ViewController.m.

Först tar vi vårt PDF-dokument från vårt apppaket.

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

Därefter skapar vi ett "ReaderDocument" som vår "Reader" kommer att kunna visa. Observera att om vårt dokument var lösenordsskyddat kunde vi ange lösenordet som den sista parametern.

 ReaderDocument * document = [ReaderDocument withDocumentFilePath: fillösenord: noll];

Därefter ser vi till att vår "ReaderDocument" har skapats framgångsrikt innan vi implementerar vår "ReaderViewController" som hanterar resten av PDF-verksamheten för oss.

 om (dokument! = noll) 

Och mellan fästena i "dokument" -kontrollen laddar vi vårt "ReaderViewController" -objekt.

 om (dokument! = noll) ReaderViewController * readerViewController = [[ReaderViewController alloc] initWithReaderDocument: dokument]; readerViewController.delegate = self; 

I det här exemplet presenterar vi vår "ReaderViewController" som en modalvy, även om vi alternativt skulle kunna presentera den med en UINavigationController om vår app använde en UINavigationController. Vi har olika alternativ för presentationsstil och övergång som vi kan använda för vår ModalViewController, så jag rekommenderar dig att experimentera med de stilar som fungerar bäst för din app. I det här fallet försöker vi efterlikna den ursprungliga Apple PDF-stilen från iBooks.

Lägg till följande rader efter "readerViewController.delegate = self;".

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

Slutligen måste vi faktiskt presentera vår ModalViewController:

 [self presentModalViewController: readerViewController animated: YES];

Som vi kan se, när vi har inkluderat vårt "Reader" -bibliotek, är det relativt enkelt att visa och interagera med PDF-filer i våra iOS-appar. Här är hela metoden som vi använde:

 - (IBAction) didClickOpenPDF: (UIButton *) avsändare NSString * file = [[NSBundle mainBundle] pathForResource: @ "typo_tips" ofType: @ "pdf"]; ReaderDocument * document = [ReaderDocument withDocumentFilePath: fillösenord: noll]; om (dokument! = noll) ReaderViewController * readerViewController = [[ReaderViewController alloc] initWithReaderDocument: dokument]; readerViewController.delegate = self; readerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; readerViewController.modalPresentationStyle = UIModalPresentationFullScreen; [self presentModalViewController: readerViewController animated: YES]; 

Om du kör och bygger vår applikation nu ser du de många funktionerna som redan fungerar för din PDF-tittare.

Det finns bara en sista sak som vi behöver hantera: avvisar vår PDF Reader ViewController när användaren trycker på knappen "Klar"..

Detta hanteras med en enkel, enkel metod:

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

Steg 3: Alternativ

Som nämnts tidigare stöder "Reader" -biblioteket många av dessa funktioner utöver att bara visa PDF-filer, till exempel utskrift, bokmärken, etc. Som standard är de flesta av dessa funktioner aktiverade. Du kan dock välja att ställa in dessa som bäst passar din ansökan genom att redigera filen "ReaderConstants.h". Var och en av dessa funktioner är listade på "Reader" GitHub-sidan, som jag kommer att visa här:

  • READER_BOOKMARKS - Om TRUE, möjliggör sidbokmärkesstöd.
  • READER_ENABLE_MAIL - Om TRUE, läggs en email-knapp i verktygsfältet
    (om enheten är korrekt konfigurerad för e-postsupport).
  • READER_ENABLE_PRINT - Om TRUE, en utskriftsknapp läggs till i verktygsfältet
    (om utskrift stöds och är tillgängligt på enheten).
  • READER_ENABLE_THUMBS - Om TRUE, en tumknapp läggs till i verktygsfältet
    (möjliggör sidminminaturs dokumentnavigering).
  • READER_DISABLE_IDLE - Om TRUE, är IOS Idle Timer avaktiverad under
    tittar på ett dokument (akta dig för batteriet).
  • READER_SHOW_SHADOWS - Om TRUE visas en skugga runt varje sida
    och sidinnehållet infogas med ett par extra poäng.
  • READER_STANDALONE - Om FALSK, läggs en "Done" -knapp till verktygsfältet
    och -dismissReaderViewController: delegate-metoden skickas när
    det är tappat.
  • READER_DISABLE_RETINA - Om TRUE ställer in CATiledLayer contentScale
    till 1,0f. Detta inaktiverar effektivt näthinnans stöd och resulterar i
    Hastighetshastigheter för näthinnan på näthinnan på
    förlusten av näthinnans displaykvalitet.

Nästa gång: Skriva PDF-dokument

Nu har du sett hur lätt det kan vara att visa PDF-filer i IOS. I nästa handledning i denna serie tittar vi på några av sätten att skapa egna PDF-filer i våra Apps.