2010-02-13 2 views
5

Я пытаюсь нарисовать страницы PDF, используя следующий код. Некоторые PDF-файлы отображаются правильно, но другие просто показывают как полностью черное изображение или имеют частичные части, а остальные черные. При сравнении того, что происходит, те, которые показывают ОК, похоже, всегда имеют «регулярный» текст в них, а также некоторые графики (диаграммы и т. Д.), В то время как те, которые выходят черным цветом, как правило, имеют всю графику (например, страницу листа музыка, например). Может ли кто-нибудь указать мне в правильном направлении? Я строил это на новом 3.2 SDK.iphone некоторые PDF-файлы рендеринга как черное изображение

Спасибо!

// 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

Попробуйте это из http://www.random-ideas.net/posts/42 –

ответ

4

CGPDFDocumentRef MyGetPDFDocumentRef (const char * filename) { Путь CFStringRef; URL-адрес CFURLRef; Документ CGPDFDocumentRef; path = CFStringCreateWithCString (NULL, имя_файла, kCFStringEncodingUTF8); url = CFURLCreateWithFileSystemPath (NULL, путь, kCFURLPOSIXPathStyle, 0); CFRelease (путь); document = CGPDFDocumentCreateWithURL (url); // 2 CFRelease (url); int count = CGPDFDocumentGetNumberOfPages (document); // 3 if (count == 0) { printf ("`% s 'требуется хотя бы одна страница! ", Имя файла); return NULL; } документ с возвратом; }

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

Просто скопируйте & пасты выше кода. Это сработает для вас.

+0

Спасибо, Сагар .... Удивительный – skantner

3

Проблема была в цвете фона - в частности, у меня возникли проблемы с проблемой pdf с белым фоном. Заполнив представление белым прямоугольником, моя проблема была решена.

Смежные вопросы