2012-09-23 9 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(一部には境界線があり、境界線がないもの)のみが含まれます。

    また、私はstackoverflowの上で見つかった提案しようとした:

    - (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]; 
    } 
    

    しかし、それはどちらか何も変更しませんでした:UILabelをサブクラス化し、これを行うことを。

    プレビューでPDFを開くと、テキストパーツはブロック単位で選択できますが、文字単位では選択できず、pdfをズームすると実際にはビットマップイメージになります。

    提案がありますか?

  • +0

    サンプルコードの断片と出力PDFファイルを投稿できるので、それらを見ることができますか? – iPDFdev

    +0

    あなたはこれを理解したことがありますか? 「ブロック選択」問題を経験する。 – JeremyDay

    +0

    と表示されません。 'UIGraphicsBeginPDFContextToFile(outputPath、view.bounds、nil); UIGraphicsBeginPDFPage(); CGContextRef pdfContext = UIGraphicsGetCurrentContext(); [view.layer renderInContext:pdfContext]; UIGraphicsEndPDFContext(); ' – JeremyDay

    答えて

    2

    This Tutorial From Raywenderlich保存された私の日です。それもあなたのために働くことを願っています。 http://www.raywenderlich.com/6818/how-to-create-a-pdf-with-quartz-2d-in-ios-5-tutorial-part-2

    +1

    私は似たようなことをしますが、pdfは正常ですが、テキストは実際のテキストではなくレンダリングされたイメージです。私は選択可能なテキストのpdfを生成したいと思います –

    +0

    しかし私は同じチュートリアルを使用して、ズームインでも私にとって完璧です。 –

    +0

    彼は選択可能なことを意味します - Mac上のカーソル(コピー、ペーストなど) –

    1

    私がこの昨年したときの私の経験は、Appleがそれを行うライブラリを提供していなかったことでした。私はオープンソースのCライブラリ(libHaru)のインポートを終了しました。次に、ビュー階層の各クラスで出力するための関数を追加しました。サブビューを持つビューはすべて、そのサブビューでレンダリングを呼び出します。私のUILabels、UITextFields、UIImageViews、UISwitchesなどは、テキストやグラフィックスのいずれかでコンテンツを出力します。また、いくつかのビューの背景色をレンダリングしました。

    libHaruはフォントに関するいくつかの問題を抱えていたので、iircはデフォルトのフォントとフォントサイズを使用してしまった。

    +0

    私はそれを見ています。ありがとう –

    関連する問題