我正在尝试从一个视图创建一个PDF,这个PDF可能很长,它有多个页面。
此视图的子视图至少有100个高度,但可以有所不同。所以我正在检查视图是否会因为页面切换而被拆分,然后尝试调整其Y值,以便在下一页显示。我正在使用此代码来执行此操作
currentRowFrame = CGRectMake(currentRowFrame.origin.x,currentRowFrame.origin.y + contentRow.frame.size.height + 5, 728, 100);
if (currentRowFrame.origin.y > 692 && currentRowFrame.origin.y < 792)
{
int extraSpace = 812 - (int)currentRowFrame.origin.y;
currentRowFrame = CGRectMake(currentRowFrame.origin.x,currentRowFrame.origin.y + extraSpace, 728, 100);
}
一个页面大小为792,所以我正在检查原点是否落在那个会重叠的空间中,如果是这样,试图将其向下滚动。
我遇到的问题是当PDF被绘制时,无论我尝试将其向下移动多远,它仍会看到最后一行(也可能是分割行),并将其添加到第一页,然后再添加到第二页。
这是我的PDF绘制代码:
// 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
int pageSize = 792;
UIGraphicsBeginPDFContextToData(pdfData, view.bounds, nil);
CGContextRef pdfContext = UIGraphicsGetCurrentContext();
NSInteger currentPage = 1;
BOOL done = NO;
do
{
//CGRect currentPageRect = CGRectMake(0, (pageSize.height*currentPage), pageSize.width, pageSize.height);
UIGraphicsBeginPDFPage();
// draws rect to the view and thus this is captured by UIGraphicsBeginPDFContextToData
CGContextTranslateCTM(pdfContext, 0, -(pageSize * (currentPage - 1)));
[view.layer renderInContext:pdfContext];
// If we're at the end of the view, exit the loop.
NSLog(@"%f", view.frame.size.height);
if ((pageSize * currentPage) > view.frame.size.height)
done = YES;
else
currentPage++;
}
while (!done);
// remove PDF rendering context
UIGraphicsEndPDFContext();
return pdfData;
我的理解是,这应该在第一次运行的视图中抓取0到796之间的所有内容,然后如果在796上方的视图上仍有空间,则再次转到另一页从796开始并转到1592. / p>
然而,似乎总是抓住我试图从第一页移开的最后一行,回到第一页,只是增加第一页的长度(视觉上)以适应它,同时还添加它到实际假设的第二页。
答案 0 :(得分:0)
我发现了这个问题。
问题在于
UIGraphicsBeginPDFContextToData(pdfData, view.bounds, nil);
view.bounds正在生成整个视图的整页,因此我制作了一个特定的CGRectMake(0, 0, view.bounds.size.width, 792);
矩形,它运行得很好。