Приложение для iPad: Объединить PDF-файлы в 1 PDF-документ / Создать PDF-документ многостраничного scrollview

#objective-c #pdf-generation #scrollview #multipage

#objective-c #генерация pdf #scrollview #многостраничный

Вопрос:

Я пишу приложение для iPad, которое использует scrollview с управлением страницей. Мне нужно создать PDF из всех страниц в виде 1 PDF-файла. До сих пор я полагал, что мне следует перебирать все вложенные представления (страницы) и создавать PDF-файлы для каждого (используя CGPDFContext). НО мне действительно нужно объединить все файлы в 1 PDF-документ. Можете ли вы помочь мне сделать это??

Или, если у вас есть лучший способ создать PDF-документ с несколькими страницами из этого scrollview, это было бы еще лучше!!

Пожалуйста, помогите. Я искал везде и увидел, что в Mac OS есть что-то, использующее PdfDocument, функцию insertPage. Я не могу найти аналогичный метод для iOS??

Ответ №1:

для создания многостраничного PDF:

 -(CGContextRef) createPDFContext:(CGRect)inMediaBox path:(NSString *) path
{
    CGContextRef myOutContext = NULL;
    NSURL * url;

    url = [NSURL fileURLWithPath:path];
    if (url != NULL) {
        myOutContext = CGPDFContextCreateWithURL (url,// 2
                                                  amp;inMediaBox,
                                                  NULL);
    }
    return myOutContext;// 4
}

-(void)createPdfFromScrollview:(UIScrollView *)scrollview
{

    CGContextRef pdfContext = [self createPDFContext:CGRectMake(0, 0, WIDTH, HEIGHT) path:outputFilePath];

    for(UIView * view in scrollview.subviews)
    {
        CGContextBeginPage (pdfContext,nil);
        CGAffineTransform transform = CGAffineTransformIdentity;
        transform = CGAffineTransformMakeTranslation(0, HEIGHT);
        transform = CGAffineTransformScale(transform, 1.0, -1.0);
        CGContextConcatCTM(pdfContext, transform);            
        //Draw view into PDF
        [view.layer renderInContext:pdfContext];

        CGContextEndPage (pdfContext);         
    }

    CGContextRelease (pdfContext);
}
  

Надеюсь, это поможет.