Mehrseitiges PDF zu mehrseitigem Tiff konvertieren

  • Mehrseitiges PDF zu mehrseitigem Tiff konvertieren

    Moin, moin!

    Habt Ihr eine Ahnung, wie ich ein mehrseitiges PDF zu einem mehrseitigem Tiff konvertieren kann? Mit dem folgenden Code bekomme ich immer nur die erste Seite als Tiff:

    Quellcode

    1. NSImage *image = [[NSImage alloc] initWithContentsOfFile: inFile];
    2. [image setBackgroundColor: [NSColor whiteColor] ];
    3. NSData *tiffData = [image TIFFRepresentation];
    4. [tiffData writeToFile: outFile atomically: YES];
    Vielen Dank + Grüße
    jerry
  • RE: Mehrseitiges PDF zu mehrseitigem Tiff konvertieren

    Original von MCDan
    Hm, wusste nicht dass es mehrseitige TIFFs gibt. Sind dabei mehrere Bilder in einer Datei zusammen gefasst?


    Ja genau. Sehr praktisch!

    Mittlerweile bin ich soweit, dass in mit NSPDFImageRep an die einzelnen Seiten ran komme, aber wie kann ich das mehrseitige Tiff mit Cocoa schreiben? Eine Lösung mit libtiff fällt mir dazu ein, würde das aber gerne nur mit Cocoa machen.

    Viele Grüße
    jerry
  • RE: Mehrseitiges PDF zu mehrseitigem Tiff konvertieren

    Einzelne Seiten aus einem PDF auslesen

    Quellcode

    1. - (NSData *)createDataFromPDF:(NSString*)filename
    2. fromPage:(int)page
    3. withBackground:(BOOL)back
    4. {
    5. /* Viel zu umstaendlich, aber es funktioniert */
    6. NSImage *sourceImage = [[NSImage alloc] initWithContentsOfFile:filename];
    7. NSSize size;
    8. if([sourceImage size].height==0 || [sourceImage size].width==0) {
    9. [sourceImage release];
    10. return nil;
    11. }
    12. if(![[sourceImage bestRepresentationForDevice:nil] isKindOfClass:[NSEPSImageRep class]]) {
    13. // Eine PDF Datei
    14. NSPDFImageRep *pdfSource = NULL;
    15. pdfSource = [[sourceImage representations] objectAtIndex:0];
    16. [pdfSource setCurrentPage:page];
    17. [sourceImage recache];
    18. //
    19. size = [pdfSource bounds].size;
    20. } else {
    21. // Keine PDF sondern eine EPS Datei -> zb alte .ai Dateien
    22. size = [sourceImage size];
    23. }
    24. NSRect destinationRect = NSMakeRect( 0, 0, size.width, size.height);
    25. NSImage * destImage = [[[NSImage alloc] initWithSize:size] autorelease];
    26. [destImage lockFocus];
    27. NSBezierPath * bp = [NSBezierPath bezierPathWithRect:destinationRect];
    28. if(back) {
    29. [[NSColor whiteColor] set];
    30. [bp fill];
    31. [[NSColor blackColor] set];
    32. [bp stroke];
    33. } else {
    34. [[NSColor clearColor] set];
    35. [bp fill];
    36. }
    37. [sourceImage drawInRect: destinationRect
    38. fromRect: destinationRect
    39. operation: NSCompositeSourceOver fraction: 1.0];
    40. [destImage unlockFocus];
    41. [sourceImage release];
    42. return [destImage TIFFRepresentation];
    43. }
    Alles anzeigen


    So bekommst die Anzahl der Seiten heraus:

    Quellcode

    1. int c;
    2. NSData *pdfData = [self createDataFromPDF:filename fromPage:0 withBackground:YES];
    3. // Wohl doch keine PDF Datei
    4. if(pdfData != nil) {
    5. NSData *data;
    6. NSPDFImageRep *pdfir;
    7. data = [NSData dataWithContentsOfFile:filename];
    8. pdfir = [NSPDFImageRep imageRepWithData:data];
    9. c = [pdfir pageCount];
    10. }
    Alles anzeigen


    Als Mehrseitiges Tiff speichern.

    Quellcode

    1. -(BOOL)saveMultiPageImage:(NSImage *)image
    2. toFile:(NSString *)filename
    3. {
    4. NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    5. NSImage *workingImage = [image copyWithZone:[image zone]];
    6. BOOL result;
    7. //Save Image
    8. NSData * imgData = [NSBitmapImageRep TIFFRepresentationOfImageRepsInArray:[workingImage representations]
    9. usingCompression:NSTIFFCompressionLZW factor:0.0];
    10. if(![imgData writeToFile:filename atomically: NO]) result=FALSE;
    11. else {
    12. [[NSWorkspace sharedWorkspace] noteFileSystemChanged:filename];
    13. result=TRUE;
    14. }
    15. // Clean Up
    16. [workingImage release];
    17. [pool release];
    18. return result;
    19. }
    Alles anzeigen

    Dabei ist image ein Bild mit mehrere representationen.

    Hoffe das hilft. Wenn nicht, einfach fragen.

    Sven
    :wq! /dev/null