Lecteur de Pdf
ettibo
Membre
Bonjour, je suis débutant en programmation sur iPhone, et j'essaye de faire un programme qui permet de lister les pdf présent sur un Ipad, les afficher dans un carroussel et quand on clic dessus, que les pdf s'ouvre.
J'ai testé d'ouvrir un pdf dans une view, mais sans succès, voici mon code:
Quand je vais sur ma view, celle-ci est blanche, des idées?
Merci d'avance
J'ai testé d'ouvrir un pdf dans une view, mais sans succès, voici mon code:
-(void)openMyPdf:(NSString *)file<br />{<br /> NSString *filePath = [[NSBundle mainBundle] pathForResource:file ofType:@"pdf" inDirectory:@"PDFDemoExport"];<br /> NSData *pdfData = [NSData dataWithContentsOfFile:filePath];<br /> NSLog(@"PATH: %@", filePath);<br /> if (pdfData) {<br /> NSLog(@"ici");<br /> CFURLRef myPdf = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)filePath, kCFURLPOSIXPathStyle, NO);<br /> CGPDFDocumentRef document = CGPDFDocumentCreateWithURL(myPdf);<br /> if (document != NULL)<br /> {<br /> CGContextRef myContext = UIGraphicsGetCurrentContext();<br /> CGPDFPageRef page = CGPDFDocumentGetPage(document, 1);<br /> CGContextDrawPDFPage(myContext, page);<br /> }<br /> }<br />}<br />
Quand je vais sur ma view, celle-ci est blanche, des idées?
Merci d'avance
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu peux passer par une UIWebView, non?
PAsse par une UIWebView plutôt
+1 pour Larme.
Avant le DrawPDFPage ajoute :
pour dessiner le pdf depuis le coin haut/gauche et dans le sens normal.
j'ai mis les lignes suivantes dans le code:
et quand je lance l'application, la console me donne ceci: Jul 20 10:20:13 Ipad1-VM SympoBrilique[7394] <Error>: CGContextTranslateCTM: invalid context 0x0
Jul 20 10:20:13 Ipad1-VM SympoBrilique[7394] <Error>: CGContextTranslateCTM: invalid context 0x0
Jul 20 10:20:13 Ipad1-VM SympoBrilique[7394] <Error>: CGContextScaleCTM: invalid context 0x0
de ce que je comprends, c'est mon contexte qui est invalide, ya t-il une autre méthode que UIGraphicsGetCurrentContext();?
Merci d'avance
avec : (CGContextRef)contex passé en paramètre
X1, x2, y1, Y2 sont les coordonnées de mon objet "Picture" qui peut être un pdf ou une bitmap.
Je l'ai juste adapté pour ton cas.
Peux-tu poster toute ta routine "openMyPdf " de dessin du pdf ?
Et bien sur, j'ai le plip qui s'affiche, je tiens à signaler que je suis dans un UIViewController, si ça peut aider pour l'orientation du problème
Il serait plus sage d'écrire :
d'après la doc. :
UIGraphicsGetCurrentContext
Returns the current graphics context.
CGContextRef UIGraphicsGetCurrentContext (
void
);
Return Value
The current graphics context.
Discussion
The current graphics context is nil by default. Prior to calling its drawRect: method, view objects push a valid context onto the stack, making it current. If you are not using a UIView object to do your drawing, however, you must push a valid context onto the stack manually using the UIGraphicsPushContext function.
You should call this function from the main thread of your application only.
Tout est dit, il me semble...
Il ne faudrait pas que je "push" dans la view et non pas dans le viewController?
Il faut passer par cette méthode quitte à forcer son appel avec (UIView setNeedsDisplay).
Il faut plutôt ouvrir le pdf dans la procédure openMyPdf puis appeler (UIView drawRect) avec (UIView setNeedsDisplay) pour dessiner.
et donc, le context est toujours invalide
L'UIView sert à afficher le pdf.
L'UIViewController possède un mécanisme de choix du pdf.
Dans openMypdf, tu récupères le pdf et tu indiques à l'UIView qu'elle doit se redessiner avec : [self.view set Needsdisplay]
Puis tu dessines dans la méthode drawRect de l'UIView ou depuis cette méthode.
La différence est qu'il utilise des layers donc le dessin est placé dans drawLayer au lieu de drawRect.