SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
5.
Funzionalità MobilePaper
• Visualizzazione in portrait e landscape (2 pagine affiancate)
• Zoom della pagina tramite pinch o con doppio tap
• Possibilità di passare alle pagine successive o precedenti
• Visualizzazione delle pagine tramite elenco e/o miniature
• Visualizzazione dell'indice (capitoli e paragrafi del pdf)
• Memorizzazione dei segnalibri (preferiti)
• Scelta della musica di sottofondo
• Inserimento di note
• Ricerca di testo all'interno della rivista
• Disponibile su iOS ed Android
5
6.
Editoria su iOS
• Varie possibilità:
– App Native
– Uso di PDF con eventuale aggiunta di
elementi nativi (multimedia ed interazione)
– HTML 5
6
7.
Il formato Pdf
• Portable Document Format
• File basato su un linguaggio di descrizione pagina
• Sviluppato da Adobe System nel 1993
• Nel 2007 è diventato standard ISO 32000
• Ci sono vari sottoformati (PDF/A, PDF/X, PDF/E...)
7
8.
PDF/A
• PDF/A (PDF/Archiving) per l’archiviazione a lungo
termine (ha 2 sottoformati /A-1a /A-1b)
• Standard ISO 19005-1:2005 dal 2005
• Basato sulla vesione 1.4 del formato PDF di Adobe
• Documenti “auto contenuti”
– Include i font che utilizza!!
– Include immagini, colori, altri dati
– Non ci sono fonti esterne
• Nel sottoformato PDF/A-2 si basa PDF v. 1.7
8
9.
PDF: specifiche
http://www.adobe.com/devnet/pdf/
pdf_reference.html
Ultima versione:
PDF Reference, sixth edition APDF version 1.7
1310 pagine!!!
9
10.
Uso della webview
• Vantaggi
– Facile da realizzare
– Possibilità di usare pdf “online”
– Funzionamento dei link interni
• Svantaggi
– Poca interazione lato utente
– Scrollview verticale
– Nessuna paginazione
10
11.
Caricare Pdf in una webview
NSString *pdfPath = [[NSBundle mainBundle] pathForResource:@"file"
ofType:@"pdf"];
NSURL *url = [NSURL fileURLWithPath:pdfPath];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[webView loadRequest:urlRequest];
11
13.
Uso di Quartz
• Motore di rendering di Darwin
chiamato “per gli amici” con il
nome di Core Graphics
• Quartz 2D:
– libreria grafica ereditata da QuickDraw
– usa il formato PDF per il disegno!!!
– si basa sulla versione 1.4 Adobe PDF
13
14.
Classi che ci interessano
• CGPDFDocument
• CGPDFPage
• CGPDFObject
• CGContext
14
15.
Caricamento del Pdf
#import <QuartzCore/QuartzCore.h>
NSURL *pdfURL = [[NSBundle mainBundle] URLForResource:@"TestPage.pdf"
withExtension:nil];
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
// Prendo la prima pagina
CGPDFPageRef page = CGPDFDocumentGetPage(pdf, 1);
CGPDFPageRetain(page);
// Determino la grandezza del PDF
CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
pdfScale = self.imageView.frame.size.width/pageRect.size.width;
pageRect.size = CGSizeMake(pageRect.size.width*pdfScale,
pageRect.size.height*pdfScale);
15
18.
Scorrimento pagine
• Uso di scrollview con paginazione
• Creare una classe per la singola pagina
ereditando da UIView
• Pre-caricare più pagine ma...
• Attenzione alla memoria!
– Scaricare / Caricare una “finestra” di pagine
18
22.
Gestire lo Zoom
• Scrollview con dentro Scrollviews :)
– Ogni pagina è una scrollview!
• Utilizzando per lo zoom il delegato:
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
22
23.
Zoom con doppio tap
• Intercettarlo tramite touchesBegan
• Permettere lo zoom in base a dove si è
fatto il tap!
• Tornare a zoom scale = 1 con ulteriore
doppio tap
23
27.
CATiledLayer
• Presente dentro QuartzCore!
• Poca documentazione (4 properties, 1 Class Method)
• Esempio: Applicazione Mappe
• Ogni view possiede un CALayer
– CATiledLayer è una sottoclasse di CALayer!
• Per il disegno usare drawLayer:inContext:
27
28.
LevelofDetail e LevelOfDetailBias
• Level Of Detail il num di livelli di dettaglio per il layer
• Level Of Detail Bias è il num di livelli magnified di dettaglio per il
layer
• Ogni LODB/LOD è una potenza di due o più rispetto al livello di
dettaglio
28
29.
LevelofDetail e LevelOfDetailBias
• Level Of Detail il num di livelli di dettaglio per il layer
• Level Of Detail Bias è il num di livelli magnified di dettaglio per il
layer
• Ogni LODB/LOD è una potenza di due o più rispetto al livello di
dettaglio
28
30.
TileSize
• E’ la grandezza massima di ogni
singolo tile usato nel layer
• Di base è 256x256
• Ci sono problemi con iPad 3 :(
29
31.
LevelofDetail e LevelOfDetailBias
• UIScrollview con zoom
– minimumZoomScale 0.125f
– maximumZoomScale 8.0f
– Zoom di fattore 8
• Potremmo scegliere LevelOfDetail 7 e LevelOfDetailBias 3
– 7 configurazioni di level of detail
– ogni livello è la metà di risoluzione del precedente
– primi 3 sono a risoluzione “magnified”
– il 4 è a risoluzione normale
– gli ultimi 3 sono a risoluzione ridotta
30
36.
Metadati
• Dalle specifiche sono presenti al capitolo
10.2 Metadata
• Sono in un formato “particolare”
• Si possono estrarre con CoreGraphics 8-)
1 0 obj
<< /Title ( PostScript Language Reference, Third Edition )
/Author (Adobe Systems Incorporated)
/Creator (Adobe FrameMaker 5.5.3 for Power Macintosh®) /Producer (Acrobat Distiller
3.01 for Power Macintosh) /CreationDate (D:19970915110347-08'00')
/ModDate (D:19990209153925-08'00')
>> endobj
35
38.
Titolo ed autore del pdf
CGPDFDictionaryRef info = CGPDFDocumentGetInfo(pdf);
CGPDFStringRef titleStringRef;
CGPDFDictionaryGetString(info, "Title", &titleStringRef);
const unsigned char *titleCstring =
CGPDFStringGetBytePtr(titleStringRef);
printf("Titolo: %s", titleCstring);
CGPDFStringRef authorStringRef;
CGPDFDictionaryGetString(info, "Author", &authorStringRef);
const unsigned char *authorCstring =
CGPDFStringGetBytePtr(authorStringRef);
printf("nAutore: %s", authorCstring);
37
39.
Accesso ai dati PDF
• CGPDFDocument
• CGPDFDocumentGetCatalog
• CGPDFPage
• CGPDFPageGetDictionary
• CGPDFObjectGetObject, CGPDFDictionaryGetBoolean,
CGPDFDictionaryGetInteger, CGPDFDictionaryGetString,
CGPDFDictionaryGetArray...
38
40.
Indice
• Non è sempre presente :)
• In base alla versione ed al formato
potrebbe cambiare... (gestire più casi!)
• Dalle specifiche presente nel capitolo
8.2 Document-Level Navigation
39