PDF Seite an die Größe des iPads anpassen & direkt so ausgeben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PDF Seite an die Größe des iPads anpassen & direkt so ausgeben

    Hallo zusammen,

    ich baue noch an meinem iPad PDF Reader. Die PDF Seiten werden per Quartz gezeichnet. Leider aber in einer zu kleinen Abmessung. Meine drawLayer Methode Zeichnet die PDFs immer in einer größe von {{0, 0}, {610, 794}}. Ich hätte jetzt aber gerne, dass sich die PDF Seite im Portrait auf die gesamte iPad größe öffnet, im Landsacpe dann zwei Seiten nebeneinander. Wie kann ich das denn beeinfussen?

    Quellcode

    1. - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
    2. {
    3. //NSLog(@"drawLayer layer %@ ooo inContext %@",layer,ctx);
    4. CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0);
    5. CGContextFillRect(ctx, CGContextGetClipBoundingBox(ctx));
    6. CGContextTranslateCTM(ctx, 0.0, layer.bounds.size.height);
    7. NSLog(@"layer.bounds %@",NSStringFromCGRect(layer.bounds));
    8. CGContextScaleCTM(ctx, 1.0, -1.0);
    9. page = [layer.name intValue]; //Seite die gezeichnet werden soll
    10. CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(CGPDFDocumentGetPage(myDocumentRef, page), kCGPDFCropBox, layer.bounds, 0, true));
    11. CGContextDrawPDFPage(ctx, CGPDFDocumentGetPage(myDocumentRef, page));
    12. }
    Alles anzeigen


    Kann mir jemdan weiterhelfen?

    Danke schon mal :)
  • macmoonshine schrieb:

    Ist vielleicht Dein Layer nur einfach zu klein?

    Glaube nicht. In der viewDidLoad erstelle ich den mit 1024x1024

    Quellcode

    1. - (void)viewDidLoad {
    2. [super viewDidLoad];
    3. // get orientation of device //
    4. [self getOriented];
    5. CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("mypdf.pdf"), NULL, NULL);
    6. myDocumentRef = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
    7. NSUInteger i;
    8. CGRect pageRect;
    9. myContentView = [[UIView alloc]init];
    10. for (i = 1; i <= kNumImages; i++)
    11. {
    12. myPageRef = CGPDFDocumentGetPage(myDocumentRef, i);
    13. pageRect = CGRectIntegral(CGPDFPageGetBoxRect(myPageRef, kCGPDFCropBox));
    14. CATiledLayer *tiledLayer = [CATiledLayer layer];
    15. tiledLayer.delegate = self;
    16. tiledLayer.tileSize = CGSizeMake(1024.0, 1024.0);
    17. tiledLayer.levelsOfDetail = 1000;
    18. tiledLayer.levelsOfDetailBias = 1000;
    19. tiledLayer.frame = pageRect;
    20. tiledLayer.name = [NSString stringWithFormat:@"%i", i];
    21. /// Hier wird das PDF direkt in den View geschrieben. Funkt bedingt, weil unten die drawLayer Methode
    22. /// nur die letzte Seite des PDFs aufruft
    23. UIView *theContentView = [[UIView alloc] initWithFrame:pageRect];
    24. theContentView.tag = i;
    25. theContentView.frame = CGRectMake(0,0, 1024,768);
    26. theContentView.backgroundColor = [UIColor yellowColor];
    27. [theContentView.layer addSublayer:tiledLayer];
    28. NSLog(@"theContentView %@",theContentView);
    29. [myContentView addSubview:theContentView];
    30. [theContentView release];
    31. /*
    32. // Hier werden alle PDF Seiten geladen, aber es wird nicht mehr richtig gezoomt
    33. oneSite = [[OnePDFSite alloc]myInitWithFrame:pageRect andPageNumber:i];
    34. [oneSite setMyPageNumber:i];
    35. oneSite.tag = i;
    36. NSLog(@"myPageRef %@",myPageRef);
    37. [myContentView addSubview:oneSite];
    38. [oneSite release];
    39. */
    40. }
    41. CGRect viewFrame = self.view.frame;
    42. viewFrame.origin = CGPointZero;
    43. //scrollView = [[UIScrollView alloc] initWithFrame:viewFrame];
    44. scrollView.delegate = self;
    45. //scrollView.contentSize = pageRect.size;
    46. myContentView.frame = pageRect;
    47. scrollView.maximumZoomScale = 5;
    48. scrollView.minimumZoomScale = kZoomScale;
    49. [scrollView setCanCancelContentTouches:NO];
    50. scrollView.clipsToBounds = NO; // default is NO, we want to restrict drawing within our scrollview
    51. scrollView.scrollEnabled = YES;
    52. scrollView.bouncesZoom = YES;
    53. scrollView.pagingEnabled = YES;
    54. scrollView.backgroundColor = [UIColor grayColor];
    55. [scrollView setZoomScale:kZoomScale];
    56. [self layoutScrollImages]; // now place the photos in serial layout within the scrollview
    57. [scrollView addSubview:myContentView];
    58. //[self.view addSubview:myContentView];
    59. }
    Alles anzeigen


    Kann ich den nicht nachträglich in der Größe anpassen?
  • fwtag schrieb:

    Hast Du mal überprüft, ob der UIView, in dem Du das PDF ausgeben möchtest, zu klein ist?
    der UIView ist 1024x768 - aber auch wenn ich den auf 2000x2000 hochschraube, bleibt der Layer immer bei seiner Größe von 610x794 - orientiert der sich irgendwie an irgendwelchen Dimensionen des PDFs? Ich weiß gar nicht wo die Werte herkommen.... ?(
  • Ich glaube er hier ist Schuld an den Werten

    Quellcode

    1. pageRect = CGRectIntegral(CGPDFPageGetBoxRect(myPageRef, kCGPDFCropBox));


    Aber auch wenn ich pageRect selber setzte (pageRect = CGRectMake(0, 0, 768.0, 1024.0);) behält die PDF Seite ihr Ausmaße bei.
    Der Aufruf ist davon völlig unbeeindruckt & weist dem PDF keine neuen Größenwerte zu....

    Quellcode

    1. CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(CGPDFDocumentGetPage(myDocumentRef, page), kCGPDFCropBox, pageRect, 0, FALSE));
  • 1. Bist Du sicher, dass Dein UIVIew die richtige Größe hat? Test: [deinView setBackgroundcolor:[UIColor redColor]]
    2. Bist Du sicher, dass der Layer, in den Du zeichnest, der Layer Deines Views ist und die richtige Größe hat? Test: [[deinView layer] setBackgroundcolor:[UIColor blueColor]]
    3. Bist Du sicher, dass das PDF überhaupt mit Deiner Ausgabemethode skaliert wird? Hast Du mal Tests gemacht?
  • fwtag schrieb:

    1. Bist Du sicher, dass Dein UIVIew die richtige Größe hat? Test: [deinView setBackgroundcolor:[UIColor redColor]]
    2. Bist Du sicher, dass der Layer, in den Du zeichnest, der Layer Deines Views ist und die richtige Größe hat? Test: [[deinView layer] setBackgroundcolor:[UIColor blueColor]]
    3. Bist Du sicher, dass das PDF überhaupt mit Deiner Ausgabemethode skaliert wird? Hast Du mal Tests gemacht?

    1 + 2 bin ich sicher

    bei 3 so la la. also mit dem unteren Aufruf kann ich das PDF drehen oder über pageRect auch in der x + y Achse verschieben. Nur größer bekomme ich es über pageRect nicht.

    Quellcode

    1. CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(CGPDFDocumentGetPage(myDocumentRef, page), kCGPDFCropBox, pageRect, 0, FALSE));


    Runterscalieren geht - geht es vielleicht prinzipiell nicht hochzuskalieren?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von cuSoon ()