我正在尝试从可能很长它有多个页面的视图创建 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。
但是,它似乎总是抓住我试图从第一页移出的最后一行,回到第一页,只是增加第一页的长度(视觉上)以适应它,同时还将它添加到第二页,它实际上应该是。