- (NSData *)generatePDF { vcNewForm = [FSingleton sharedInstance].vcNewForm; // PDF NSData NSMutableData *pdfData = [NSMutableData data]; UIGraphicsBeginPDFContextToData(pdfData, vcNewForm.printPaper.bounds, nil); UIGraphicsBeginPDFPage(); // print area background if (vcNewForm.printBackground) { NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"tmp/tmpFormImage.jpg"]; UIImage *iBg = [UIImage imageWithContentsOfFile:jpgPath]; [iBg drawInRect:CGRectMake(vcNewForm.printArea.frame.origin.x, vcNewForm.printArea.frame.origin.y, vcNewForm.printArea.frame.size.width, vcNewForm.printArea.frame.size.height)]; } for (FormField *field in vcNewForm.printArea.subviews) { CGRect fieldFrameInPrintPaper = [vcNewForm.printPaper convertRect:field.frame fromView:vcNewForm.printArea]; if ([field.fieldType isEqualToString:@"textField"]) { if (field.defaultText && ![field.defaultText isEqualToString:@""]) { [field.defaultText drawInRect:fieldFrameInPrintPaper withFont:field.font lineBreakMode:UILineBreakModeWordWrap alignment:field.textAlign]; } else { [field.keyboardDictType drawInRect:fieldFrameInPrintPaper withFont:field.font lineBreakMode:UILineBreakModeWordWrap alignment:field.textAlign]; } } if ([field.fieldType isEqualToString:@"checkbox"]) { [field.iconImg drawInRect:CGRectMake(fieldFrameInPrintPaper.origin.x+3, fieldFrameInPrintPaper.origin.y+3, fieldFrameInPrintPaper.size.width-6, fieldFrameInPrintPaper.size.height-6)]; } if ([field.fieldType isEqualToString:@"fieldFromDB"]) { [field.dbField drawInRect:fieldFrameInPrintPaper withFont:field.font lineBreakMode:UILineBreakModeWordWrap alignment:field.textAlign]; } } UIGraphicsEndPDFContext(); return pdfData; }
Wszystko jest ok, tylko gdy rozmiar wygenerowanego PDF jest w orientacji poziomej, to Print Controller dopasowuje go do szerokości kartki w orientacji pionowej.
Więc potrzebuje wykonać transformacje wygenerowanego PDFa zapisanego w NSData, do orientacji Pionowej, czyli obrócić go o 90 stopni.