2012-09-23 3 views
7

iOS 6 앱에서 멋진 PDF를 생성하고 싶습니다.iOS에서 "실제"텍스트 콘텐츠로 PDF를 생성하려면 어떻게해야합니까?

나는 시도했다 :

  • 있는 UIView 여기

코드 예제를 UILabel의의 drawRect입니다 사용는 NSString drawInRect

  • 를 사용
  • CoreText
  • 을 사용하여 상황에 맞는
  • 에서 렌더링 :

    -(CGContextRef) createPDFContext:(CGRect)inMediaBox path:(NSString *) path 
    { 
        CGContextRef myOutContext = NULL; 
        NSURL * url; 
    
        url = [NSURL fileURLWithPath:path]; 
        if (url != NULL) { 
         myOutContext = CGPDFContextCreateWithURL ((__bridge CFURLRef) url, 
                    &inMediaBox, 
                    NULL); 
        } 
    
    
        return myOutContext; 
    } 
    
    -(void)savePdf:(NSString *)outputPath 
    { 
        if (!pageViews.count) 
         return; 
    
        UIView * first = [pageViews objectAtIndex:0]; 
    
        CGContextRef pdfContext = [self createPDFContext:CGRectMake(0, 0, first.frame.size.width, first.frame.size.height) path:outputPath]; 
    
        for(UIView * v in pageViews) 
        { 
         CGContextBeginPage (pdfContext,nil); 
         CGAffineTransform transform = CGAffineTransformIdentity; 
         transform = CGAffineTransformMakeTranslation(0, (int)(v.frame.size.height)); 
         transform = CGAffineTransformScale(transform, 1, -1); 
         CGContextConcatCTM(pdfContext, transform); 
    
         CGContextSetFillColorWithColor(pdfContext, [UIColor whiteColor].CGColor); 
         CGContextFillRect(pdfContext, v.frame); 
    
         [v.layer renderInContext:pdfContext]; 
    
         CGContextEndPage (pdfContext); 
        } 
    
        CGContextRelease (pdfContext); 
    } 
    

    렌더링되는 UIView에는 UIImageView + 한 묶음의 UILabels 만 포함됩니다 (일부는 테두리가 있고 일부는 테두리가 없음). UILabel의 서브 클래스와이 일을 :

    는 또한 유래에서 발견 제안을 시도

    - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { 
        BOOL isPDF = !CGRectIsEmpty(UIGraphicsGetPDFContextBounds()); 
        if (!layer.shouldRasterize && isPDF) 
         [self drawRect:self.bounds]; // draw unrasterized 
        else 
         [super drawLayer:layer inContext:ctx]; 
    } 
    

    을하지만 그 중 하나가 아무것도 변경하지 않았다.

    미리보기에서 PDF를 열 때 텍스트 부분은 블록으로 선택할 수 있지만 문자 당 문자는 선택할 수없고 PDF 확대/축소는 실제로 비트 맵 이미지로 표시됩니다.

    제안 사항?

  • +0

    예제 코드 조각과 출력 PDF 파일을 게시하여 볼 수 있습니까? – iPDFdev

    +0

    혹시 이것을 알아 냈습니까? "블록 선택"문제가 발생했습니다. – JeremyDay

    +0

    이제는 발생하지 않습니다. 'UIGraphicsBeginPDFContextToFile (outputPath, view.bounds, nil); UIGraphicsBeginPDFPage(); CGContextRef pdfContext = UIGraphicsGetCurrentContext(); [view.layer renderInContext : pdfContext]; UIGraphicsEndPDFContext(); ' – JeremyDay

    답변

    2
    +1

    나는 비슷한 것을하고 pdf는 괜찮아 보이지만 텍스트는 실제 텍스트가 아니라 렌더링 된 이미지입니다. 선택 가능한 텍스트가있는 PDF를 생성하고 싶습니다. –

    +0

    하지만 동일한 튜토리얼을 사용하여 확대/축소에서도 나를 완벽하게 처리했습니다. –

    +0

    그는 선택 가능하다는 것을 의미합니다 - Mac의 커서 (복사, 붙여 넣기 등)와 같습니다. –

    1

    내가 작년에했던 경험은 애플이 라이브러리를 제공하지 않았다는 것입니다. 나는 오픈 소스 C 라이브러리 (libHaru)를 가져온다. 그런 다음 뷰 계층 구조의 각 클래스에서 출력하기위한 함수를 추가했습니다. 하위보기가있는보기는 하위보기에서 렌더링을 호출합니다. 내 UILabels, UITextFields, UIImageViews, UISwitches 등은 텍스트 나 그래픽으로 내용을 출력하므로 일부보기에서는 배경색도 렌더링했습니다.

    libHaru가 글꼴에 약간의 문제를 주었으므로 iirc에서 기본 글꼴과 글꼴 크기를 사용하게되었습니다.

    +0

    나는 그것을 살펴볼 것입니다. 감사 –

    관련 문제