Annotations du PDFKit |
Bienvenue invité ( Connexion | Inscription )
Annotations du PDFKit |
26 Mar 2014, 18:50
Message
#1
|
|
Nouveau Membre Groupe : Membres Messages : 4 Inscrit : 14 Feb 2012 Membre no 174 587 |
Bonsoir à tous,
Je suis pas parvenu à comprendre la méthode setQuadrilateralPoint de la classe PDFAnnotationMarkup du PDFKit. Elle est utilisée pour définir les quatre points d'une sélection multiples lignes. Ce que je sais: 1. Je dois lui transmettre un tableau (NSArray*) dont chaque élément est un objet de la classe NSValue formaté avec une structure NSPoint. 2. Ces points sont exprimés selon le repère de la page (PDFPage) dans laquelle la notation est construite. voici le code qui est censé surligneur la sélection courante. Code -(IBAction)hightlight_action:(id)sender { PDFAnnotationMarkup* annotation; PDFSelection* selection = [_PDFView currentSelection]; PDFPage* page = [[selection pages] lastObject]; NSArray* linesSelected = [selection selectionsByLine]; NSRect bounds = [selection boundsForPage:page]; NSMutableArray* array = [NSMutableArray array]; annotation = [[PDFAnnotationMarkup alloc] initWithBounds:bounds]; [annotation setMarkupType:kPDFMarkupTypeHighlight]; [annotation setColor:[NSColor yellowColor]]; if ([linesSelected count] > 1) { for (selection in linesSelected) { bounds = [selection boundsForPage:page]; // il faut que les points soient cites dans le sens horaire // coin bas gauche [array addObject:[NSValue valueWithPoint:NSMakePoint(bounds.origin.x,bounds.origin.y)]]; // coin haut gauche [array addObject:[NSValue valueWithPoint:NSMakePoint(bounds.origin.x,NSMaxY(bounds))]]; // coin haut droit [array addObject:[NSValue valueWithPoint:NSMakePoint(NSMaxX(bounds),NSMaxY( bounds))]]; // coin bas droit [array addObject:[NSValue valueWithPoint:NSMakePoint(NSMaxX(bounds),bounds.origin.y)]]; } [annotation setQuadrilateralPoints:array]; } [page addAnnotation:annotation]; [annotation release]; [_PDFView clearSelection]; [_PDFView setCurrentAnnotation:annotation]; } /* hightlight_action */ Mon problème est que la zone surlignée n'est pas celle sélectionnée. Par avance, merci pour l'aide apportée. |
|
|
27 Mar 2014, 17:06
Message
#2
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 1 198 Inscrit : 8 Oct 2003 Membre no 10 220 |
Salut,
Peut-être un problème de flipped coordinates (les pdf views doivent être flipped) J'ai trouver un exemple qui justement ne construit pas le NSArray dans le même ordre: Code [(PDFAnnotationMarkup *)_activeAnnotation setQuadrilateralPoints: [NSArray arrayWithObjects: [NSValue valueWithPoint: NSMakePoint(0.0, bounds.size.height)], [NSValue valueWithPoint: NSMakePoint(bounds.size.width, bounds.size.height)], [NSValue valueWithPoint: NSMakePoint(0.0, 0.0)], [NSValue valueWithPoint: NSMakePoint(bounds.size.width, 0.0)], NULL]]; https://github.com/darcyliu/CocoaSampleCode...r/PDFViewEdit.m |
|
|
27 Mar 2014, 19:07
Message
#3
|
|
Nouveau Membre Groupe : Membres Messages : 4 Inscrit : 14 Feb 2012 Membre no 174 587 |
Merci de ton aide,
J'ai déjà étudié ce code. Il ne fonctionne pas lorsqu'au moins deux lignes consécutives sont sélectionnées à des endroits différents, il sélectionne les deux lignes entièrement. Le bounds correspond à une zone rectangulaire. Puisque la sélection sur plusieurs lignes ne correspond plus à une zone rectangulaire globale, le système propose de retourner une zone par ligne, à l'aide de la méthode selectionsByLine. La solution que j'ai retenue, consiste à créer des annotations distinctes pour chacune des lignes, et ça fonctionne !…mais pas comme on peut le trouver sous Aperçu, par exemple. Si tu veux creuser le problème et tu trouves la solution, je suis preneur. Bonne soirée. |
|
|
Nous sommes le : 26th April 2024 - 07:51 |