2014-01-13 4 views
0

UIView 배열을 사용하여 PDF로 렌더링하는 코드 스 니펫을 작성했습니다. 그러나 PDF 페이지를 병합하거나 모든 뷰를 단일 페이지로 렌더링하는 방법을 알 수 없기 때문에 각 뷰가 별도의 페이지로 렌더링됩니다.iOS : 여러 UIView의 단일 페이지 PDF

현재 코드 :

+ (NSData*)pdfFromViews:(NSArray*)views 
{ 
    NSMutableData* pdf = [NSMutableData data]; 

    UIGraphicsBeginPDFContextToData(pdf, CGRectZero, nil); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    for(UIView* view in views) 
    { 
     UIGraphicsBeginPDFPageWithInfo(view.bounds, nil); 
     [view.layer renderInContext:context]; 
    } 

    UIGraphicsEndPDFContext(); 

    return pdf; 
} 

내가 한 번만이 줄을 호출하는 경우 - UIGraphicsBeginPDFPage() - 견해가 서로의 위에 그려 질, 아무리 내가 view.layer.frame로 만들거나 어떤 크기 나 사용 CGRect 무엇을 변경 내 문맥.

현재 이미지 품질에 만족하며 링크 또는 텍스트를 PDF에 추가 할 필요가 없습니다.

결과 PDF 페이지를 병합하거나 내보기를 단일 페이지로 그릴 수있는 방법을 찾고 있습니다. 참고 : 내 뷰를 내 앱 레이아웃을 망쳐 놓기 때문에 뷰를 하위 뷰로 추가 할 수 없습니다. 이상적으로, 나는 이것을 할 것이지만 UIViews는 복사 될 수 없다.

답변

2
CGContextTranslateCTM와 사이가 렌더링 원점 시프트

:

+ (NSData*)pdfFromViews:(NSArray*)views { 
    NSMutableData* pdf = [NSMutableData data]; 
    UIGraphicsBeginPDFContextToData(pdf, CGRectZero, nil); 
    UIGraphicsBeginPDFPage(); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    for(UIView *view in views) { 
     [view.layer renderInContext:context]; 
     CGContextTranslateCTM(context, 0, view.bounds.size.height); 
    } 

    UIGraphicsEndPDFContext(); 
    return pdf; 
} 

당신은 또한 당신의 견해에 맞는 페이지 크기를 지정할 수 있습니다. 크기를 계산하고 UIGraphicsBeginPDFPage 대신 UIGraphicsBeginPDFPageWithInfo으로 전화하십시오.

+0

이 트릭을했습니다, 감사합니다! –

관련 문제