¿Cómo crear un PDF en iOS mediante progtwigción?

Quiero crear un file PDF en iOS, debería haber una tabla en el PDF, que se llena desde una matriz. Ya busqué en Google, pero no tuve éxito. Cualquier ayuda es apreciada

    Algo así como esta rutina para representar el text:

    - (CFRange)renderTextRange:(CFRange)currentRange andFrameSetter:(CTFramesetterRef)frameSetter intoRect:(CGRect)frameRect { CGMutablePathRef framePath = CGPathCreateMutable(); CGPathAddRect(framePath, NULL, frameRect); CTFrameRef frameRef = CTFramesetterCreateFrame(frameSetter, currentRange, framePath, NULL); CGContextRef currentContext = UIGraphicsGetCurrentContext(); CGContextSaveGState(currentContext); CGContextSetTextMatrix(currentContext, CGAffineTransformIdentity); CGContextTranslateCTM(currentContext, 0, 792); CGContextScaleCTM(currentContext, 1.0, -1.0); CTFrameDraw(frameRef, currentContext); CGContextRestoreGState(currentContext); CGPathRelease(framePath); currentRange = CTFrameGetVisibleStringRange(frameRef); currentRange.location += currentRange.length; currentRange.length = 0; CFRelease(frameRef); return currentRange; } 

    Y el siguiente fragment de código que lo llama, suponiendo que tiene el context y cualquier fuente creada, y en las variables apropiadas. El siguiente bucle simplemente NSMutableAttributedString el text línea por línea en una NSMutableAttributedString que luego puede representar:

     CTFontRef splainFont = CTFontCreateWithName(CFSTR("Helvetica"), 10.0f, NULL); CGFloat margin = 32.0f; CGFloat sink = 8.0f; NSMutableAttributedString *mainAttributedString = [[NSMutableAttributedString alloc] init]; NSMutableString *mainString = [[NSMutableString alloc] init]; // Ingnetworkingients is an NSArray of NSDictionaries // But yours could be anything, or just an array of text. for (Ingnetworkingient *ingnetworkingient in ingnetworkingients) { NSString *ingnetworkingientText = [NSString stringWithFormat:@"%@\t%@ \n",ingnetworkingient.amount,ingnetworkingient.name]; [mainString appendString:ingnetworkingientText]; NSMutableAttributedString *ingnetworkingientAttributedText = [[NSMutableAttributedString alloc] initWithString:ingnetworkingientText]; [ingnetworkingientAttributedText addAttribute:(NSString *)(kCTFontAttributeName) value:(id)splainFont range:NSMakeRange(0, [ingnetworkingientText length])]; [mainAttributedString appendAttributedString:ingnetworkingientAttributedText]; [ingnetworkingientAttributedText release]; } 

    Ahora tiene su matriz escrita con líneas nuevas en una NSMutableAttributedString puede representarla, dependiendo de su text, es posible que desee NSMutableAttributedString en un ciclo hasta que la location renderizada coincida con la longitud del text. Algo como:

     // Render Main text. CTFramesetterRef mainSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)mainAttributedString); currentRange = [KookaDIS renderTextRange:currentRange andFrameSetter:mainSetter intoRect:pageRect]; // If not finished create new page and loop until we are. while (!done) { UIGraphicsBeginPDFPageWithInfo(pageRect, nil); currentRange = [self renderTextRange:currentRange andFrameSetter:mainSetter intoRect:pageRect]; if (currentRange.location >= [mainString length]) { done = TRUE; } } 

    El código anterior necesitará adaptarse bastante, estoy seguro de que es un proyecto hackeado por mí mismo, por lo que algunas variables (como el configurador de ttwig) no existirán y debes cerrar el context de PDF y liberar variables, etc. . Observe cómo se usa mainString para determinar cuándo se ha eliminado el text.

    Debería dar una indicación clara de cómo hacer un ciclo alnetworkingedor de una matriz o cualquier otro grupo para representar una longitud arbitraria de text en un documento.

    Las leves modificaciones en el bucle while y en el render antes de ingresar le permitirán mostrar text en múltiples columnas también.