美文网首页iOS 技巧
iOS PDF文件生成

iOS PDF文件生成

作者: Snow_L | 来源:发表于2021-04-16 11:20 被阅读0次

    1.把scrollView上面的内容生成PDF文件,代码如下:

    - (NSString *)createPDF {

     NSDate*printTime = [NSDatedate];

    NSString*fileName = [NSStringstringWithFormat:@"%@_%@_%@.pdf",self.user.real_name,self.title, [self.dateHourMinuteFormatterstringFromDate:printTime]];

        NSURL*storeURL = [selfbuildStoreURLForFileName:fileName];

        NSString*storePath = storeURL.path;

        CGFloatcontentViewWidth =CGRectGetWidth(self.scrollView.frame);

        CGFloatcontentViewHeight =CGRectGetHeight(self.scrollView.frame);

        CGFloatpageWidth = contentViewWidth;

        CGFloatpageHeight = contentViewHeight +143.f;

        UIGraphicsBeginPDFContextToFile(storePath,CGRectMake(0,0, pageWidth, pageHeight),nil);

    NSString*dateText = [NSStringstringWithFormat:@"%@ (%d%@)",self.dataSelectView.label.text, (int)self.daysCount, (self.daysCount>1) ?MyLocalizedString(@"unit.days",nil) :MyLocalizedString(@"unit.day",nil)];

        NSDictionary*pdmSettings = (NSDictionary*)self.user.settings.pdmSettings;

        NSString*pdmSN =@"";

        if([pdmSettingsobjectForKey:@"PDMSN"]) {

            pdmSN = [AppDelegatetransformSerialString:[pdmSettingsobjectForKey:@"PDMSN"]];

        }

        NSString*pumpBaseSN =@"";

        if([pdmSettingsobjectForKey:@"PumpBaseSN"]) {

            pumpBaseSN = [AppDelegatetransformSerialString:[pdmSettingsobjectForKey:@"PumpBaseSN"]];

        }

        NSString*transmitterSN =@"";

        if([pdmSettingsobjectForKey:@"TransmitterSN"]) {

            transmitterSN = [AppDelegatetransformSerialString:[pdmSettingsobjectForKey:@"TransmitterSN"]];

        }

        NSUIntegerpageCount =0;

        CGFloatsumWidth = contentViewWidth;

        CGFloatsumHeight = contentViewHeight;

        CGFloatheaderViewHight =0;

        for(UIView*iteminself.scrollView.subviews) {

            if(![itemisKindOfClass:[UIImageViewclass]]) {

                for(UIView*viewinitem.subviews) {

                    if(pageCount ==0||CGRectGetMaxX(view.frame) > sumWidth ||CGRectGetMaxY(view.frame) > sumHeight) {

                        pageCount++;

                        if(CGRectGetMaxX(view.frame) > sumWidth) {

                            sumWidth += contentViewWidth;

                        }

                        if(CGRectGetMaxY(view.frame) > sumHeight) {

                            sumHeight += contentViewHeight;

                        }

                        UIGraphicsBeginPDFPage();

                        headerViewHight = [selfcreateHeaderViewWithWidth:pageWidthdateText:dateTextname:self.user.real_namepdmSN:pdmSNpumpBaseSN:pumpBaseSNtransmitterSN:transmitterSN];

                        [self createFooterViewWithWidth:pageWidth height:(pageHeight - 35) name:self.myDelegate.user.real_name ? self.myDelegate.user.real_name : self.myDelegate.user.username pageNumber:(unsigned int)pageCount printTime:printTime];

                    }

                    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0);

                    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

                    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

                    image = [selfadjustColor:image];

                    UIGraphicsEndImageContext();

                    [imagedrawInRect:CGRectMake(CGRectGetMinX(view.frame) - sumWidth + contentViewWidth,CGRectGetMinY(view.frame) + headerViewHight - sumHeight + contentViewHeight,CGRectGetWidth(view.frame),CGRectGetHeight(view.frame))];

                }

            }

        }

        UIGraphicsEndPDFContext();

        returnstorePath;

    }

    2.把tableView上面的内容生成PDF文件,代码如下:

    #pragma mark- Create PDF

    - (NSString *)createPDF {

        NSDate*printTime = [NSDatedate];

        NSString*fileName = [NSStringstringWithFormat:@"%@_%@_%@.pdf",self.user.real_name,self.title, [self.dateHourMinuteFormatterstringFromDate:printTime]];

        NSURL*storeURL = [selfbuildStoreURLForFileName:fileName];

        NSString*storePath = storeURL.path;

        CGFloatlayoutConstraintConstant =self.tableViewHeightConstraint.constant;

        self.tableViewHeightConstraint.constant=self.tableView.contentSize.height-CGRectGetHeight(self.tableView.frame) + layoutConstraintConstant;

        [self.tableView reloadData];

        CGFloatpageWidth =self.tableView.contentSize.width;

    //    CGFloat pageHeight = self.tableView.contentSize.height + 143.f;

        CGFloatpageHeight =self.tableView.sectionHeaderHeight+31*self.tableView.rowHeight+143.f;

        UIGraphicsBeginPDFContextToFile(storePath,CGRectMake(0,0, pageWidth, pageHeight),nil);

        NSString*dateText = [NSStringstringWithFormat:@"%@ (%d%@)",self.dataSelectView.label.text, (int)self.daysCount, (self.daysCount>1) ?MyLocalizedString(@"unit.days",nil) :MyLocalizedString(@"unit.day",nil)];

        NSDictionary*pdmSettings = (NSDictionary*)self.user.settings.pdmSettings;

        NSString*pdmSN =@"";

        if([pdmSettingsobjectForKey:@"PDMSN"]) {

            pdmSN = [AppDelegatetransformSerialString:[pdmSettingsobjectForKey:@"PDMSN"]];

        }

        NSString*pumpBaseSN =@"";

        if([pdmSettingsobjectForKey:@"PumpBaseSN"]) {

            pumpBaseSN = [AppDelegatetransformSerialString:[pdmSettingsobjectForKey:@"PumpBaseSN"]];

        }

        NSString*transmitterSN =@"";

        if([pdmSettingsobjectForKey:@"TransmitterSN"]) {

            transmitterSN = [AppDelegatetransformSerialString:[pdmSettingsobjectForKey:@"TransmitterSN"]];

        }

        NSUIntegerpageCount =0;

        CGFloatcontentHeight =0;

        CGFloatoffsetY =0;

        do{

            pageCount ++;

            UIGraphicsBeginPDFPage();

            CGFloatheaderViewHight = [selfcreateHeaderViewWithWidth:pageWidthdateText:dateTextname:self.user.real_namepdmSN:pdmSNpumpBaseSN:pumpBaseSNtransmitterSN:transmitterSN];

            [self createFooterViewWithWidth:pageWidth height:(pageHeight - 35) name:self.myDelegate.user.real_name ? self.myDelegate.user.real_name : self.myDelegate.user.username pageNumber:(unsigned int)pageCount printTime:printTime];

            UIGraphicsBeginImageContextWithOptions(self.tableView.contentSize, NO, 0.0);

            [self.tableView.layer renderInContext:UIGraphicsGetCurrentContext()];

            UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

            CGFloatscale = [UIScreenmainScreen].scale;

            offsetY += contentHeight;

            if(pageCount ==1) {

                contentHeight =self.tableView.sectionHeaderHeight+31*self.tableView.rowHeight;

            }elseif(pageCount ==2) {

                contentHeight =32*self.tableView.rowHeight;

            }elseif(pageCount ==3) {

                contentHeight =30*self.tableView.rowHeight;

            }

            CGImageRefimageRef =CGImageCreateWithImageInRect(image.CGImage,CGRectMake(0, offsetY * scale, image.size.width* scale, contentHeight * scale));

            image = [UIImageimageWithCGImage:imageRef];

            CGImageRelease(imageRef);

            UIGraphicsEndImageContext();

            [imagedrawInRect:CGRectMake(CGRectGetMinX(self.tableView.frame), headerViewHight, image.size.width/ scale, image.size.height/ scale)];

        }while(pageCount *30<self.daysCount);

        UIGraphicsEndPDFContext();

        self.tableViewHeightConstraint.constant= layoutConstraintConstant;

        returnstorePath;

    }

    2.把UIView上面的内容生成PDF文件,代码如下:

    #pragma mark- Create PDF

    - (NSString *)createPDF {

        if (self.contentView.subviews.lastObject == nil || self.contentView.subviews.lastObject.subviews.count == 0) {

            returnnil;

        }

        if (![self.contentView.subviews.lastObject.subviews.lastObject isKindOfClass:[UIScrollView class]]) {

            returnnil;

        }

        NSDate*printTime = [NSDatedate];

        NSString*fileName = [NSStringstringWithFormat:@"%@_%@_%@.pdf",self.patientRealName,self.title, [self.dateHourMinuteFormatterstringFromDate:printTime]];

        NSURL*storeURL = [selfbuildStoreURLForFileName:fileName];

        NSString*storePath = storeURL.path;

        NSDictionary*pdmSettings =self.pdmSettings;

        NSString*createdTimeStr =@"";

        if([pdmSettingsobjectForKey:@"CreatedTime"]) {

            createdTimeStr = [self.dateTimeFormatterstringFromDate:[pdmSettingsobjectForKey:@"CreatedTime"]];

        }

        NSString*pdmSN =@"";

        if([pdmSettingsobjectForKey:@"PDMSN"]) {

            pdmSN = [AppDelegatetransformSerialString:[pdmSettingsobjectForKey:@"PDMSN"]];

        }

        NSString*pumpBaseSN =@"";

        if([pdmSettingsobjectForKey:@"PumpBaseSN"]) {

            pumpBaseSN = [AppDelegatetransformSerialString:[pdmSettingsobjectForKey:@"PumpBaseSN"]];

        }

        NSString*transmitterSN =@"";

        if([pdmSettingsobjectForKey:@"TransmitterSN"]) {

            transmitterSN = [AppDelegatetransformSerialString:[pdmSettingsobjectForKey:@"TransmitterSN"]];

        }

        [self hideContentController:self.currentViewController];

        UIGraphicsBeginPDFContextToFile(storePath, CGRectZero, nil);

        NSUIntegerpageCount =0;

        for(inti =0; i <4; i++) {

            pageCount ++;

            UIViewController*printViewController;

            switch(i) {

                case1:

                    printViewController =self.bolusSettingsViewController;

                    break;

                case2:

                    printViewController =self.sensorSettingsViewController;

                    break;

                case3:

                    printViewController =self.utilitiesSettingsViewController;

                    break;

                default:

                    printViewController =self.basalSettingsViewController;

                    break;

            }

            [selfdisplayContentController:printViewController];

            [printViewController.viewlayoutIfNeeded];

            UIScrollView *scrollView = self.contentView.subviews.lastObject.subviews.lastObject;

            CGFloatpageWidth = scrollView.contentSize.width;

            CGFloatpageHeight = scrollView.contentSize.height+143.f;

            UIGraphicsBeginPDFPageWithInfo(CGRectMake(0,0, pageWidth, pageHeight),nil);

            NSString*dateText = [NSStringstringWithFormat:@"%@ %@", [self.segmentedtitleForSegmentAtIndex:i], createdTimeStr];

            CGFloatheaderViewHight = [selfcreateHeaderViewWithWidth:pageWidthdateText:dateTextname:self.patientRealNamepdmSN:pdmSNpumpBaseSN:pumpBaseSNtransmitterSN:transmitterSN];

            [self createFooterViewWithWidth:pageWidth height:(pageHeight - 35) name:self.myDelegate.user.real_name ? self.myDelegate.user.real_name : self.myDelegate.user.username pageNumber:(unsigned int)pageCount printTime:printTime];

            for(UIView*viewinscrollView.subviews) {

                if(![viewisKindOfClass:[UIImageViewclass]]) {

                    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0);

                    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

                    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

                    if(![viewisKindOfClass:[UILabelclass]] && ![viewisKindOfClass:[UITableViewclass]]) {

                        image = [selfadjustColor:image];

                    }

                    UIGraphicsEndImageContext();

                    [imagedrawInRect:CGRectMake(CGRectGetMinX(view.frame), CGRectGetMinY(view.frame) + headerViewHight, CGRectGetWidth(view.frame), CGRectGetHeight(view.frame))];

                }

            }

            [selfhideContentController:printViewController];

        }

        UIGraphicsEndPDFContext();

        [self displayContentController:self.currentViewController];

        returnstorePath;

    }

    相关文章

      网友评论

        本文标题:iOS PDF文件生成

        本文链接:https://www.haomeiwen.com/subject/uawdlltx.html