以正确的方向呈现PDF的正确方法是什么?

时间:2014-02-21 10:55:54

标签: ios objective-c pdf pdf-generation core-graphics

我使用核心图形 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的完美方式。

1 个答案:

答案 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();