Цель состоит в том, чтобы получить настоящие кадры на странице pdf для идентификации искомой строки. Я использую PDFKitten lib, чтобы выделить текст, который был найден, и пытаюсь понять, как получить кадры для выделенного текста. Основной метод следующий:
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
CGContextSetFillColorWithColor(ctx, [[UIColor whiteColor] CGColor]);
CGContextFillRect(ctx, layer.bounds);
// Flip the coordinate system
CGContextTranslateCTM(ctx, 0.0, layer.bounds.size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
// Transform coordinate system to match PDF
NSInteger rotationAngle = CGPDFPageGetRotationAngle(pdfPage);
CGAffineTransform transform = CGPDFPageGetDrawingTransform(pdfPage, kCGPDFCropBox, layer.bounds, -rotationAngle, YES);
CGContextConcatCTM(ctx, transform);
CGContextDrawPDFPage(ctx, pdfPage);
if (self.keyword)
{
CGContextSetFillColorWithColor(ctx, [[UIColor yellowColor] CGColor]);
CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
for (Selection *s in self.selections)
{
NSLog(@"layer.bounds = %f, %f, %f, %f", layer.bounds.origin.x, layer.bounds.origin.y, layer.bounds.size.width, layer.bounds.size.height);
CGContextSaveGState(ctx);
CGContextConcatCTM(ctx, s.transform);
NSLog(@"s.frame = %f, %f, %f, %f", s.frame.origin.x, s.frame.origin.y, s.frame.size.width, s.frame.size.height);
CGContextFillRect(ctx, s.frame);
CGContextRestoreGState(ctx);
}
}
}
Размер слоя (612.000000, 792.000000), но размер s.frame (3.110400, 1.107000). Как я могу получить реальную рамку из прямоугольника, заполненного желтым цветом?
frame
бессмысленна, если только преобразование не является идентичностью. Документы совершенно ясно об этом. - person matt   schedule 25.12.2016s
! Но ваш вопрос касаетсяframe
, аframe
— это чисто сконструированная концепция, которая не имеет смысла при преобразовании. - person matt   schedule 25.12.2016