我使用核心图形 CGContextDrawPDFPage 功能渲染PDF。我试图在图像视图中显示PDF页面。页面正在完美呈现。但有些页面的方向不正确。有些是向右翻转,倒置。这种情况只发生在少数PDF /页面上,而不是全部。以下是呈现PDF页面的代码片段。我在网上看过很多帖子,但所有帖子都在某种程度上失败了。另外,我对核心图形并不熟悉。
CGImageRef imageRef = NULL;
CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bmi = (kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst);
CGContextRef context = CGBitmapContextCreate(NULL, target_w, target_h, 8, 0, rgb, bmi);
if (context != NULL) {
CGRect thumbRect = CGRectMake(0.0f, 0.0f, target_w, target_h);
CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 1.0f);
CGContextFillRect(context, thumbRect);
CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);
CGRect mediaRect = CGPDFPageGetBoxRect(thePDFPageRef, kCGPDFCropBox);
CGContextScaleCTM(context, target_w / mediaRect.size.width, target_h / mediaRect.size.height);
CGContextTranslateCTM(context, -mediaRect.origin.x, -mediaRect.origin.y);
CGContextDrawPDFPage(context, thePDFPageRef);
imageRef = CGBitmapContextCreateImage(context);
CGContextRelease(context);
}
CGColorSpaceRelease(rgb);
if (imageRef != NULL) {
UIImage *image = [UIImage imageWithCGImage:imageRef scale:UIScreen.mainScreen.scale orientation:UIImageOrientationUp];
CFRelease(imageRef);
}
请建议我渲染PDF的完美方式。
答案 0 :(得分:0)
我不确定这对你有帮助,因为我不完全确定你想要在你的PDF格式中捕捉到什么。
然而,当我这样做时,我需要从我的webview中做pdf。为此,您需要
#import <QuartzCore/QuartzCore.h>
然后
CGRect frame = myWebView.frame;
frame.size.height = 1;
myWebView.frame = frame;
CGSize fittingSize = [myWebView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
myWebView.frame = frame;
UIGraphicsBeginImageContextWithOptions(fittingSize, YES, 2);
[myWebView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *myImg = [[UIImageView alloc] initWithImage:viewImage];
NSMutableData *pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData(pdfData, myImg.bounds, nil);
UIGraphicsBeginPDFPage();
[myImg.layer renderInContext:UIGraphicsGetCurrentContext()];
UIGraphicsEndPDFContext();