2017-06-10 42 views
10

Chciałbym zmienić tekst i kolor tła wyświetlanego dokumentu PDF za pomocą Apple's PDFKit Framework pokazać dokumenty w „Tryb nocny” (ciemne tło, światło planie , just like in Adobe Reader).Zmiana tekstu i kolor tła z ram PDFKit Apple

Wiem PDFPage class ma drawWithBox:toContext: metody, które mogą być zastąpione w podklasie dodać efekty (jak znak wodny, jak pokazano na this WWDC 2017 session), ale nie wiem jak ustawić właściwości koloru.

Czy można to zrobić z biblioteką PDFKit lub innym interfejsem API niskiego poziomu (mechanizm kwarcowy) firmy Apple?

+0

Czy rysowania tekstu na własną rękę w kontekście? Czy mógłbyś opublikować kod, który robisz w tej metodzie? Widzę, że w PDFPage istnieje ciąg atrybutów NSAttributedString. – Ramis

+0

Nie chcę niczego narysować na stronie, chcę tylko pokazać istniejące dokumenty w trybie nocnym (ciemne tło i jasny pierwszy plan). Trochę jak w Adobe Reader: https://forums.adobe.com/thread/1837487 – Bedford

+0

Czy kiedykolwiek znalazłeś sposób na zastosowanie trybu nocnego lub odwracanie kolorów na stronie PDF? –

Odpowiedz

5

Dla dając kolor tekstu w formacie pdf można wykorzystać,

-(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; 
} 

A dla koloru tła, należy użyć następujących

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