PDF从页面上的视图绘制对象,应该在下一页上

时间:2013-09-04 19:47:20

标签: ios objective-c

我正在尝试从一个视图创建一个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>

然而,似乎总是抓住我试图从第一页移开的最后一行,回到第一页,只是增加第一页的长度(视觉上)以适应它,同时还添加它到实际假设的第二页。

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。

问题在于

UIGraphicsBeginPDFContextToData(pdfData, view.bounds, nil);

view.bounds正在生成整个视图的整页,因此我制作了一个特定的CGRectMake(0, 0, view.bounds.size.width, 792);矩形,它运行得很好。