2012-04-12 11 views
8

長いhtmlページがあり、それを複数ページのPDFファイルに変換する必要がありました。iOS - HTMLコンテンツから複数ページのPDFを作成する

私は applehere - how to make multi page PDFに記載されている指示に従っています。

しかし、NSString(いくつかのデータのようなもの)のフォーマットはhtmlページの作成よりも難しいです。私はこのhtmlを作成し、それをUIWebViewに表示しています。

このHTMLのPDFをマルチページ PDFファイルに作成します。

私が使用しているコードでは、単一のPDFを作成できます。

 
- (void)createPDFfromUIView:(UIWebView *)aView saveToDocumentsWithFileName:(NSString*)aFilename 
{ 
    // Creates a mutable data object for updating with binary data, like a byte array 
    NSMutableData *pdfData = [NSMutableData data]; 

    // Points the pdf converter to the mutable data object and to the UIView to be converted 
    UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil); 
    UIGraphicsBeginPDFPage(); 
    CGContextRef pdfContext = UIGraphicsGetCurrentContext(); 


    // draws rect to the view and thus this is captured by UIGraphicsBeginPDFContextToData 

    [aView.layer renderInContext:pdfContext]; 

    // remove PDF rendering context 
    UIGraphicsEndPDFContext(); 

    // Retrieves the document directories from the iOS device 
    NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES); 

    NSString* documentDirectory = [documentDirectories objectAtIndex:0]; 
    NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename]; 

    // instructs the mutable data object to write its context to a file on disk 
    [pdfData writeToFile:documentDirectoryFilename atomically:YES]; 
    NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename); 
} 

助けてもらえますか?

答えて

14

私が見つけたすべての良いアドバイスに基づいてクラスを作成しました。私はたくさん掘り下げてきました。私は、HTMLソースから複数ページのPDFを直接作成しようとしている人にとってクラスがうまく始めることを願っています。

あなたはいくつかの基本的なサンプルコードをここで全体のコードを見つけることができます:https://github.com/iclems/iOS-htmltopdf

私はあなたと私の要件とちょうど同じ問題を持っていたがあった。 - フルPDF(実際のテキスト、ノービットマップ) - スマート(Xピクセルごとにフルハイトのwebviewをカットするのに比べて)

このように、iOSがプリント用にページを分割するのと同じツールに頼っているので、私が使用するソリューションはかなりいいです。

Web表示用印刷フォーマッタ(最初の先端)に基づいて、私はセットアップUIPrintPageRenderer、私に説明してみましょう:一方で

UIPrintPageRenderer *render = [[UIPrintPageRenderer alloc] init]; 

[render addPrintFormatter:webView.viewPrintFormatter startingAtPageAtIndex:0]; 

CGRect printableRect = CGRectMake(self.pageMargins.left, 
           self.pageMargins.top, 
           self.pageSize.width - self.pageMargins.left - self.pageMargins.right, 
           self.pageSize.height - self.pageMargins.top - self.pageMargins.bottom); 

CGRect paperRect = CGRectMake(0, 0, self.pageSize.width, self.pageSize.height); 

[render setValue:[NSValue valueWithCGRect:paperRect] forKey:@"paperRect"]; 
[render setValue:[NSValue valueWithCGRect:printableRect] forKey:@"printableRect"]; 

NSData *pdfData = [render printToPDF]; 

[pdfData writeToFile: self.PDFpath atomically: YES]; 

、私がサポートするためにUIPrintPageRendererにカテゴリを作成しました:

-(NSData*) printToPDF 
{ 
    [self doNotRasterizeSubviews:self.view]; 

    NSMutableData *pdfData = [NSMutableData data]; 

    UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, nil); 

    [self prepareForDrawingPages: NSMakeRange(0, self.numberOfPages)]; 

    CGRect bounds = UIGraphicsGetPDFContextBounds(); 

    for (int i = 0 ; i < self.numberOfPages ; i++) 
    { 
     UIGraphicsBeginPDFPage(); 

     [self drawPageAtIndex: i inRect: bounds]; 
    } 

    UIGraphicsEndPDFContext(); 

    return pdfData; 
} 
+0

あなたは男です。私はちょうど私が探していたサンプルアプリケーションとそのすべてを見てきました。しかし、私の要求は変わり、何かをしました。しかし、これは素晴らしいです。私はこれを将来使用するかもしれない。努力と特別なことを説明してくれてありがとう。 – Viraj

+0

このフレームワークの問題は、テキストボックスなどのデータをキャプチャしないことです。彼らはすべて空白になります。 – GuybrushThreepwood

+0

素晴らしいです!素晴らしい男 !!! – Rudi

関連する問題