2012-07-24 213 views
0

我有一個測試應用程序,做了一堆東西,但最終產品是一個.pdf,上傳到數據庫。不幸的是,我的一個最終用戶不喜歡長.pdf是一頁的事實。生成的頁面長度變化很大,所以無論如何我只是生成一個頁面。我知道的Adobe Acrobat將瓷磚大文件到打印多個頁面,但客戶關注的是,這可能是太困難了一些人-_-渲染多頁PDF

下面是我如何創建一個PDF現在

- (void)exportAsPDF:(NSString *)filename 
{   
    int restorer = mineTable.frame.size.height; 

    CGRect temp = CGRectMake(mineTable.frame.origin.x, mineTable.frame.origin.y, mineTable.frame.size.width, 200*formDataStorage.cake.count); 
    [self resizeTheTable:temp]; 

    int addNumber = temp.size.height - temp.origin.y; 

    CGRect mediaBox = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height + addNumber); 

    NSString *tmpFile = filename; 

    CGContextRef ctx = CGPDFContextCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:tmpFile], &mediaBox, NULL); 

    //turn PDF upside-down 
    CGAffineTransform transform = CGAffineTransformIdentity; 
    transform = CGAffineTransformMakeTranslation(0, mediaBox.size.height); 
    transform = CGAffineTransformScale(transform, 1.0, -1.0); 

    CGPDFContextBeginPage(ctx, NULL); 
    CGContextConcatCTM(ctx, transform); 

    [self.view setNeedsLayout]; 
    [self.view setNeedsDisplay]; 
    [self.view.layer renderInContext:ctx]; 

    CGPDFContextEndPage(ctx); 

    CGPDFContextClose(ctx); 
    CFRelease(ctx); 
} 

正如您所看到的,我調整了視圖的大小以顯示我正在呈現的表格中的所有單元格,然後將該視圖的截圖分類爲.pdf。用戶從不會看到調整大小的視圖(它無論如何都不適合在屏幕上)。

有誰知道如何將創建的.pdf的不同部分與不同的頁面關聯?謝謝。

回答

3

我結束了使用此代碼:

- (void)exportAsPDF:(NSString *)filename 
{   
    int restorer = mineTable.frame.size.height; 
    CGRect temp = CGRectMake(mineTable.frame.origin.x, mineTable.frame.origin.y, mineTable.frame.size.width, 398*formDataStorage.cake.count); 
    [self resizeTheTable:temp]; 

    int addNumber = temp.size.height - temp.origin.y; 
    CGRect mediaBox = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height + addNumber); 

    NSMutableData *theData = [NSMutableData data]; 
    CGSize pageSize = CGSizeMake(self.view.frame.size.width, 792); 
    UIGraphicsBeginPDFContextToData(theData, CGRectZero, nil); 
    CGContextRef pdfContext = UIGraphicsGetCurrentContext(); 

    NSInteger currentPage = 0; 
    BOOL done = NO; 

    do { 
     UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0.0, pageSize.width, pageSize.height), nil); 
     CGContextTranslateCTM(pdfContext, 0, -(pageSize.height*currentPage)); 
     [self.view.layer renderInContext:pdfContext]; 

     if ((pageSize.height*(currentPage+1)) > mediaBox.size.height) done = YES; 
     else currentPage++; 
    } while (!done); 

    UIGraphicsEndPDFContext(); 

    [theData writeToFile:filename atomically:YES]; 
    NSLog(@"PDF written to: %@", filename); 
} 
1

你已經回答了你自己,但如果它是有幫助的,你可以使用服務像Docmosis產生從iOS版PDF文件。在你的情況下,分頁問題永遠不會發生,因爲文檔是基於模板填充的「流動」。缺點是你必須連接到網絡。