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 が描画されたときに、どれだけ下に移動しようとしても最後の (そしておそらく分割された) 行が表示され、最初のページに追加され、次に 2 番目のページに追加されることです。

これは私の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 までの別のページをもう一度作成します。

ただし、最初のページから移動して最初のページに戻り、最初のページの長さを (視覚的に) 増やして、最初のページに追加しようとしている最後の行を常に取得しているようです。実際にあると思われる2番目のページ。

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 に答える