Изменение цвета текста и фона с помощью платформы Apple PDFKit

Я хочу, чтобы изменил цвет текста и фона отображаемого PDF-документа с помощью Apple PDFKit Framework, чтобы показать документы в "Ночном режиме" (темный фон, передний план переднего плана, как в Adobe Reader).

Я знаю, что класс PDFPage имеет drawWithBox: toContext:, который может быть перезаписан в подклассе для добавления эффектов (например, водяной знак, как показано в этот сеанс WWDC 2017), но я не знаю, t знать, как установить цветовые свойства.

Есть ли способ сделать это с помощью библиотеки PDFKit или любого другого низкоуровневого API (Quartz) от Apple?

Ответ 1

Для получения текста в формате pdf вы можете использовать

-(CGRect)addText:(NSString*)text withFrame:(CGRect)frame font:(NSString*)fontName fontSize:(float)fontSize andColor:(UIColor*)color{
    const CGFloat *val = CGColorGetComponents(color.CGColor);

    CGContextRef    currentContext = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(currentContext, val[0], val[1], val[2], val[3]);
    UIFont *font =  [UIFont fontWithName:fontName size:fontSize];
    CGSize stringSize = [text sizeWithFont:font constrainedToSize:CGSizeMake(pageSize.width - 2*20-2*20, pageSize.height - 2*20 - 2*20) lineBreakMode:NSLineBreakByWordWrapping];

    CGRect renderingRect = CGRectMake(frame.origin.x, frame.origin.y, textWidth, stringSize.height);

    [text drawInRect:renderingRect withFont:font lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentLeft];

    frame = CGRectMake(frame.origin.x, frame.origin.y, textWidth, stringSize.height);

    return frame;
}

И для цвета фона используйте следующие

CGContextRef currentContext = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(currentContext, [UIColor blueColor].CGColor );
    CGContextFillRect(currentContext, CGRectMake(0, 110.5, pageSize.width, pageSize.height));