IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Annotations du PDFKit
Options
eric60
posté 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.
Go to the top of the page
 
+Quote Post
mpergand
posté 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
Go to the top of the page
 
+Quote Post
eric60
posté 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.

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 26th April 2024 - 07:51