ビューから 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番目のページ。