Как изменить цвет фона CGPDFPageRef и как удалить тень страницы - PullRequest
0 голосов
/ 03 декабря 2011

Я пытаюсь нарисовать контент в UIWebView вместо UIView, потому что мне нравится способность UIWebView увеличивать и уменьшать масштаб, зажимая. Вот мой код:

// setup environment
CGRect outputRect = myWebView.bounds;
CFMutableDataRef data = CFDataCreateMutable(NULL, 0); // init with default allocator and unlimited size
CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData(data);
CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &outputRect, NULL);

CGPDFContextBeginPage(pdfContext, NULL);

// draw something
CGContextSetRGBFillColor (pdfContext, 1, 0, 0, 1);
CGContextFillRect (pdfContext, CGRectMake (0, 0, 200, 100 ));
CGContextSetRGBFillColor (pdfContext, 0, 0, 1, .5);
CGContextFillRect (pdfContext, CGRectMake (0, 0, 100, 200 ));

CGPDFContextEndPage(pdfContext);

// load drawing in webView
[myWebView loadData:(NSData *)data MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];

// cleanup
if(data != NULL) CFRelease(data); // always make sure to not pass NULL in CFRelease
CGDataConsumerRelease(dataConsumer);
CGContextRelease(pdfContext);

За UIWebView происходят другие вещи, которые я хочу видеть, поэтому я сделал фон UIWebView прозрачным, вот так:

myWebView.opaque = NO; //otherwise setting background color has no effect
myWebView.backgroundColor = [UIColor clearColor];

Это работает правильно, если я не загружаю PDF. Однако, когда файл PDF загружается, его страница имеет белый фон и тень, как на скриншоте ниже. Это портит мой дизайн пользовательского интерфейса. Как я могу избавиться от тени и сделать страницу PDF прозрачной?

Спасибо

enter image description here

1 Ответ

7 голосов
/ 27 декабря 2011

UIWebView использует внутреннюю платформу для отображения PDF, которая не позволяет вам менять фон, по крайней мере, с помощью какой-то сумасшедшей хакерской программы.И вы действительно не должны возиться с внутренностями UIWebView.И вам действительно не следует рисовать пользовательский контент в UIWebView!Это абсолютно не предназначено для этого.Он предназначен для использования в качестве черного ящика, отображающего веб-контент, и (по милости Бога) pdf.

Используйте UIScrollView и нарисуйте там свои PDF-файлы.Это не так много волшебства, и он предназначен для масштабирования.Чтобы масштабирование было эффективным, вы можете использовать CATiledLayer для перерисовки pdf-страницы после увеличения масштаба, иначе текст станет размытым.

Отказ от ответственности: я трачу около года на написание PSPDFKit , библиотека, которая делает именно это.На самом деле довольно сложно сделать это быстро, а также не вылетать на старых устройствах.

Когда я снова проверяю ваш код, вам вообще нужен pdf?Почему бы просто не нарисовать UIView, который является подпредставлением UIScrollView?Должно работать идеально для ваших нужд.Также будет намного быстрее, чем весь способ написания / анализа / рендеринга PDF только для рисования.

...