2012-07-24 108 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文件。在你的情况下,分页问题永远不会发生,因为文档是基于模板填充的“流动”。缺点是你必须连接到网络。