Frage

Ich versuche, die Seiten eines PDF mit dem folgenden Code zu zeichnen. Einige PDFs rendern korrekt, andere zeigen einfach ein völlig schwarzes Bild oder haben teilweise Portionen und den Rest schwarz. Wenn Sie verglichen werden, was vor sich geht, scheinen diejenigen, die OK zeigen, zusammen mit einigen Grafiken (Diagramme usw.) immer "reguläre" Text zu haben, während diejenigen, die schwarz herauskommen Musik zum Beispiel). Kann mich jemand in die richtige Richtung zeigen? Ich baue dies auf dem neuen 3.2 SDK.

Vielen Dank!

// PDF page drawing expects a Lower-Left coordinate system, so we flip the coordinate system
// before we start drawing.
 CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
 CGContextScaleCTM(context, 1.0, -1.0);

 // Grab the first PDF page
CGPDFPageRef page = CGPDFDocumentGetPage(myPDF, pageNo);
// We're about to modify the context CTM to draw the PDF page where we want it, so save     the graphics state in case we want to do more drawing
CGContextSaveGState(context);
// CGPDFPageGetDrawingTransform provides an easy way to get the transform for a PDF page. It will scale down to fit, including any
// base rotations necessary to display the PDF page correctly. 
CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, self.bounds, 0, true);
// And apply the transform.
CGContextConcatCTM(context, pdfTransform);
// Finally, we draw the page and restore the graphics state for further manipulations!
CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);
War es hilfreich?

Lösung

CgpdfdocumentRef mygetPdfdocumentRef (const char *Dateiname) {cfstringref path; CFURLREF URL; CGPDFDocumentRef -Dokument; path = cfstringCreatewithcstring (null, fileName, kcfstringencodingutf8); URL = cfurlCreatewithFilesSystemPath (NULL, Pfad, kcfurlpoxpathStyle, 0); Cfrelease (Pfad); document = cgpdfdocumentCreatewithurl (URL); // 2 cfrelease (URL); int count = cgpdfdocumentGetNumberofpages (Dokument); // 3 if (count == 0) {printf ("`%s 'braucht mindestens eine Seite! ", Dateiname); Null zurückkehren; } Rückgabedokument; }

void MyDisplayPDFPage (CGContextRef myContext,size_t pageNumber,const char *filename) {
    CGPDFDocumentRef document;
    CGPDFPageRef page;
    document = MyGetPDFDocumentRef (filename);// 1
    page = CGPDFDocumentGetPage (document, pageNumber);// 2
    CGContextDrawPDFPage (myContext, page);// 3
    CGContextTranslateCTM(myContext, 0, 20);
    CGContextScaleCTM(myContext, 1.0, -1.0);
    CGPDFDocumentRelease (document);// 4
}



#import "DashBoard.h"

#import <QuartzCore/QuartzCore.h>

@interface UIImage (WBImage)
// rotate UIImage to any angle
-(UIImage*)rotate:(UIImageOrientation)orient;
@end

@implementation UIImage (WBImage)


static inline CGFloat degreesToRadians(CGFloat degrees)
{
    return M_PI * (degrees / 180.0);
}

static inline CGSize swapWidthAndHeight(CGSize size)
{
    CGFloat  swap = size.width;

    size.width  = size.height;
    size.height = swap;

    return size;
}


-(UIImage*)rotate:(UIImageOrientation)orient
{
    CGRect             bnds = CGRectZero;
    UIImage*           copy = nil;
    CGContextRef       ctxt = nil;
    CGRect             rect = CGRectZero;
    CGAffineTransform  tran = CGAffineTransformIdentity;

    bnds.size = self.size;
    rect.size = self.size;

    switch (orient)
    {
        case UIImageOrientationUp:
            return self;

        case UIImageOrientationUpMirrored:
            tran = CGAffineTransformMakeTranslation(rect.size.width, 0.0);
            tran = CGAffineTransformScale(tran, -1.0, 1.0);
            break;

        case UIImageOrientationDown:
            tran = CGAffineTransformMakeTranslation(rect.size.width,
                                                    rect.size.height);
            tran = CGAffineTransformRotate(tran, degreesToRadians(180.0));
            break;

        case UIImageOrientationDownMirrored:
            tran = CGAffineTransformMakeTranslation(0.0, rect.size.height);
            tran = CGAffineTransformScale(tran, 1.0, -1.0);
            break;

        case UIImageOrientationLeft:
            bnds.size = swapWidthAndHeight(bnds.size);
            tran = CGAffineTransformMakeTranslation(0.0, rect.size.width);
            tran = CGAffineTransformRotate(tran, degreesToRadians(-90.0));
            break;

        case UIImageOrientationLeftMirrored:
            bnds.size = swapWidthAndHeight(bnds.size);
            tran = CGAffineTransformMakeTranslation(rect.size.height,
                                                    rect.size.width);
            tran = CGAffineTransformScale(tran, -1.0, 1.0);
            tran = CGAffineTransformRotate(tran, degreesToRadians(-90.0));
            break;

        case UIImageOrientationRight:
            bnds.size = swapWidthAndHeight(bnds.size);
            tran = CGAffineTransformMakeTranslation(rect.size.height, 0.0);
            tran = CGAffineTransformRotate(tran, degreesToRadians(90.0));
            break;

        case UIImageOrientationRightMirrored:
            bnds.size = swapWidthAndHeight(bnds.size);
            tran = CGAffineTransformMakeScale(-1.0, 1.0);
            tran = CGAffineTransformRotate(tran, degreesToRadians(90.0));
            break;

        default:
            // orientation value supplied is invalid
            assert(false);
            return nil;
    }

    UIGraphicsBeginImageContext(bnds.size);
    ctxt = UIGraphicsGetCurrentContext();

    switch (orient)
    {
        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
            CGContextScaleCTM(ctxt, -1.0, 1.0);
            CGContextTranslateCTM(ctxt, -rect.size.height, 0.0);
            break;

        default:
            CGContextScaleCTM(ctxt, 1.0, -1.0);
            CGContextTranslateCTM(ctxt, 0.0, -rect.size.height);
            break;
    }

    CGContextConcatCTM(ctxt, tran);
    CGContextDrawImage(ctxt, rect, self.CGImage);

    copy = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return copy;
}


@end




@implementation DashBoard

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
    filePath=[[NSString alloc] initWithString:[[NSBundle mainBundle] pathForResource:@"roadie" ofType:@"pdf"]];

    // an IBOutlet UIScrollView
    [scrMain setContentSize:CGSizeMake(720, 720)];
    // an IBOutlet UIImageView
    [imgV setFrame:CGRectMake(0, 0, 720, 720)];
    UIGraphicsBeginImageContext(CGSizeMake(720, 720));
    // initial page is an size_t variable
    initialPage=1;
    MyDisplayPDFPage(UIGraphicsGetCurrentContext(), initialPage, [filePath UTF8String],myTable,mainString);
    imgV.image=UIGraphicsGetImageFromCurrentImageContext();
    imgV.image=[imgV.image rotate:UIImageOrientationDownMirrored];
}

Kopieren Sie einfach den obigen Code. Es wird für Sie funktionieren.

Andere Tipps

Das Problem war die Hintergrundfarbe - insbesondere die PDFs, mit denen ich Probleme hatte, hatte keinen weißen Hintergrund. Durch das Füllen der Ansicht mit einem weißen Rechteck wurde mein Problem gelöst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top