0

我正在尝试从可能很长它有多个页面的视图创建 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。

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

4

1 回答 1

0

我发现了这个问题。

问题出在了线上

UIGraphicsBeginPDFContextToData(pdfData, view.bounds, nil);

view.bounds 正在生成整个视图的完整页面,所以我做了一个特定的矩形,CGRectMake(0, 0, view.bounds.size.width, 792);结果很好。

于 2013-09-04T20:27:45.937 回答