2010-02-13 16 views
5

Aşağıdaki kodları kullanarak PDF sayfalarını çizmeye çalışıyorum. Bazı PDF'ler doğru şekilde oluşturulur, ancak diğerleri tamamen siyah bir görüntü olarak gösterilir veya kısmi kısımlar işlenir ve diğerleri siyah olur. Neler olup bittiğini karşılaştırırken, OK yazanların bazı grafiklerle (şemalar, vb.) Birlikte her zaman "düzenli" bir metinleri varmış gibi görünmekle birlikte, siyah olanların hepsi de tüm grafiklerdir (bir sayfa gibi) müzik, örneğin). Bu konuda bana doğru yönde işaret eden var mı? Bunu yeni 3.2 SDK'da yapıyorum.iphone belirli PDF'ler siyah görüntü olarak görüntüleniyor

Teşekkürler!

// 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); 
+0

Bunu deneyin http://www.random-ideas.net/posts/42 –

cevap

4

CGPDFDocumentRef MyGetPDFDocumentRef (const char * dosya adı) { CFStringRef yolu; CFURLRef url; CGPDFDocumentRef belgesi; yol = CFStringCreateWithCString (NULL, dosya adı, kCFStringEncodingUTF8); url = CFURLCreateWithFileSystemPath (NULL, yol, kCFURLPOSIXPathStyle, 0); CFRelease (yol); document = CGPDFDocumentCreateWithURL (url); // 2 CFRelease (url); int count = CGPDFDocumentGetNumberOfPages (document); // 3 if (sayısı == 0) { printf ("`% s 'en az bir sayfaya gereksinim duyar! ", Dosya adı); NULL döndürür; } İade dokümanı;

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]; 
} 

}

Sadece kodunun üzerinde & kopyalayıp yapıştırarak. Senin için çalışacak.

+0

Teşekkür ederim Sagar .... Awesome – skantner

3

Sorun arka plan rengiydi - özellikle de pdf'le uğraştığım sorun beyaz bir arka plana sahip değildi. Görünümü beyaz bir dikdörtgenle doldurarak problemim çözüldü.

İlgili konular