如何更改CGPDFPageRef的背景颜色,以及如何删除页面的阴影

时间:2011-12-03 07:57:34

标签: ios uiwebview pdf-generation cgpdfdocument cgpdf

我正在尝试用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加载时,其页面有白色背景和阴影,如下面的屏幕截图所示。这搞砸了我的UI设计。如何摆脱阴影并使pdf页面透明?

由于

enter image description here

1 个答案:

答案 0 :(得分:7)

UIWebView使用内部框架来显示pdf,一个不允许你改变背景的框架,至少不是一些疯狂的子类化hackery。你真的不应该搞乱UIWebView的内部。你真的,真的不应该在UIWebView中绘制自定义内容!它绝对不是为此设计的。它的设计被视为一个显示网页内容的黑匣子,并且(由上帝的怜悯)pdf。

使用UIScrollView并在那里绘制pdf。它不是很神奇,它的设计允许缩放。为了使缩放有效,您可能希望在用户缩放后使用CATiledLayer重新绘制pdf页面,否则文本将变得模糊。

免责声明:我花了大约一年的时间撰写PSPDFKit,这是一个可以做到这一点的图书馆。实际上很难让它变得更快,也不会在旧设备上崩溃。

当我再次查看您的代码时,您是否需要pdf?为什么不直接绘制UIVc,这是UIScrollView的子视图?应该完美地满足您的需求。也将比编写/解析/渲染pdf仅用于绘制的方式快得多。