2010-07-30 6 views
2

Je crée un fichier PDF par programmation dans mon application iPhone en utilisant CGContext et CGContextShowTextAtPoint. Bien que cela fonctionne bien pour un texte plus petit, chaque fois que j'ai des sauts de ligne dans mon texte (\ n) ou que je veux que le texte passe automatiquement à la ligne suivante quand il atteint la fin de la page, cela n'arrive pas.Création d'un fichier PDF à l'aide de CGContext - impossible d'obtenir des sauts de ligne + iPhone

Les sauts de ligne dans le texte sont simplement remplacés par des espaces et le texte ne s'enroule pas. J'apprécierais vraiment un heads-up sur la façon dont cela peut être réalisé. Voici le code que j'utilise pour créer le PDF.

void CreatePDFFile (CGRect pageRect, const char *filename, NSString *fromFile) { 
    CGContextRef pdfContext; 
    CFStringRef path = CFStringCreateWithCString (NULL, filename, kCFStringEncodingUTF8); 
    CGURLRef url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, 0); 
    CFRelease (path); 
    CFMutableDictionaryRef myDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); 
    CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File")); 
    CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name")); 
    pdfContext = CGPDFContextCreateWithURL (url, &pageRect, myDictionary); 
    CFRelease(myDictionary); 
    CFRelease(url); 

    CGContextBeginPage (pdfContext, &pageRect); 
    CGContextSelectFont (pdfContext, "Helvetica", 14, kCGEncodingMacRoman); 
    CGContextSetTextDrawingMode (pdfContext, kCGTextFill); 
    CGContextSetRGBFillColor (pdfContext, 0, 0, 150, 1); 
    /* This works 
    const char *text = "Sed ut perspiciatis unde omnis iste natus error sit voluptatem"; 
    CGContextShowTextAtPoint (pdfContext, 50, 760, text, strlen(text));*/ 
    //This doesn't print line breaks in the PDF 
    const char *text = "Sed ut perspiciatis unde omnis iste natus error sit voluptatem\n accusantium doloremque laudantium, totam rem aperiam, eaque ipsa"; 
    CGContextShowTextAtPoint (pdfContext, 50, 760, text, strlen(text)); 
    //This doesn't wrap text to the next line 
    const char *text = "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa"; 
    CGContextShowTextAtPoint (pdfContext, 50, 760, text, strlen(text)); 

    CGContextEndPage (pdfContext); 
    CGContextRelease (pdfContext); 
} 

Répondre

1

CGContextShowTextAtPoint ne fait que du texte de base. Vous devriez être en mesure d'utiliser le UIKit additions to NSString pour des choses comme l'emballage. Par exemple:

NSString* text = @"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa"; 
[text drawInRect:CGRectMake(50,760,200,200) withFont:[UIFont fontWithName:@"Helvetica" size:14]]; 

Notez, cependant, que les méthodes NSString agissent sur le contexte actuel, vous devrez rendre votre courant de contexte afin de les utiliser. Je suppose que cela pourrait être un problème si vous le faites dans un fil de fond ou quelque chose comme ça.

Questions connexes