PDFKit突出显示注释:quadrilateralPoints

时间:2018-02-27 04:27:52

标签: ios objective-c swift pdf pdfkit

我想使用PDFKit将高亮度注释添加到pdf文件中。我使用下面的代码添加它。

PDFPage* page = [self.pdfView.document pageAtIndex:0];
PDFAnnotation* annotation = [[PDFAnnotation alloc] initWithBounds:CGRectMake(206, 600, 60, 59) forType:PDFAnnotationSubtypeHighlight withProperties:nil];
annotation.color = UIColor.blueColor;
[page addAnnotation:annotation];

但它只是突出显示一个矩形,我想突出显示多行文字。我找到了一个问题/答案Wrong highlight annotation on apple PDFKit

但它不是我想要的,它会添加许多高亮注释,我只想添加一个注释。我了解到键值QuadPoints可以做到这一点。但是当我添加下面的代码时,它不起作用,甚至无法渲染注释。

NSArray<NSValue *> *quadrilateralPoints = [[NSArray alloc] initWithObjects:
                                           [NSValue valueWithCGPoint:CGPointMake(206.0f, 659.0f)],
                                           [NSValue valueWithCGPoint:CGPointMake(266.0f, 659.0f)],
                                           [NSValue valueWithCGPoint:CGPointMake(206.0f, 600.0f)],
                                           [NSValue valueWithCGPoint:CGPointMake(266.0f, 600.0f)],
                                           nil];

annotation.quadrilateralPoints = quadrilateralPoints;

所以现在我想知道如何实现它?或者如何使用quadrilateralPoints?

2 个答案:

答案 0 :(得分:1)

我找到了答案: 下面的代码工作

NSArray<NSValue *> *quadrilateralPoints = [[NSArray alloc] initWithObjects:
                                       [NSValue valueWithCGPoint:CGPointMake(206.0 - 206, 659.0 - 600)],
                                       [NSValue valueWithCGPoint:CGPointMake(266.0 - 206, 659.0 - 600)],
                                       [NSValue valueWithCGPoint:CGPointMake(206.0 - 206, 600.0 - 600)],
                                       [NSValue valueWithCGPoint:CGPointMake(266.0 - 206, 600.0 - 600)],
                                       nil];

annotation.quadrilateralPoints = quadrilateralPoints;

因为它基于原点界限

答案 1 :(得分:0)

我发现一种更好的方法是使用.quadPoints注解键。此方法与PDF规范匹配,并且不属于PDFAnnotationUtilities.h文件的一部分,该文件是为了兼容旧版功能而提供的。这种方式不需要您调整边界。

let quadPoints:[CGPoint] = [CGPoint(x:206.0, y:659.0),
                            CGPoint(x:266.0, y:659.0),
                            CGPoint(x:206.0, y:600.0),
                            CGPoint(x:266.0, y:600.0)]


annotation.setValue(quadPoints, forAnnotationKey: .quadPoints)

要完成答案,您还应该使用PDFSelection的selectionsByLine函数来获取特定页面上的所有选择,并按照Wrong highlight annotation on apple PDFKit

中的说明在每页上做一个注释。