我有一个用于测试的应用程序可以做很多事情,但最终产品是一个上传到数据库的.pdf。不幸的是,我的一个最终用户不喜欢长.pdf就是一页的事实。生成的页面长度变化很大,所以无论如何我只生成一个页面。我知道Adobe Acrobat会将大文件拼贴到多个页面上进行打印,但客户担心这对某些人来说可能太难了 - -
以下是我现在正在创建.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的不同部分与不同的页面相关联?感谢。
答案 0 :(得分: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 :(得分:1)
您已经回答了自己,但是如果它有用,您可以使用Docmosis之类的服务从iOS生成PDF。在您的情况下,分页问题永远不会发生,因为文档“流动”,因为它们是基于模板填充的。缺点是你必须连接到网络。