Sam*_*hah 54 pdf iphone cgcontext quartz-2d ios
我试图将内容绘制scrollview到一个PDF上下文中,我正面临着问题pagination.
以下代码我使用过:
- (void)renderTheView:(UIView *)view inPDFContext:(CGContextRef)pdfContext
{
// Creating frame.
CGFloat heightOfPdf = [[[self attributes] objectForKey:SRCPdfHeight] floatValue];
CGFloat widthOfPdf = [[[self attributes] objectForKey:SRCPdfWidth] floatValue];
CGRect pdfFrame = CGRectMake(0, 0, widthOfPdf, heightOfPdf);
CGRect viewFrame = [view frame];
if ([view isKindOfClass:[UIScrollView class]])
{
viewFrame.size.height = ((UIScrollView *)view).contentSize.height;
[view setFrame:viewFrame];
}
// Calculates number of pages.
NSUInteger totalNumberOfPages = ceil(viewFrame.size.height/heightOfPdf);
// Start rendering.
for (NSUInteger pageNumber = 0; pageNumber<totalNumberOfPages; pageNumber++)
{
// Starts our first page.
CGContextBeginPage (pdfContext, &pdfFrame);
// Turn PDF upsidedown
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformMakeTranslation(0,view.bounds.size.height);
transform = CGAffineTransformScale(transform, 1.0, -1.0);
CGContextConcatCTM(pdfContext, transform);
// Calculate amount of y to be displace.
CGFloat ty = (heightOfPdf*(pageNumber));
CGContextTranslateCTM(pdfContext,0,-ty);
[view.layer renderInContext:pdfContext];
// We are done drawing to this page, let's end it.
CGContextEndPage (pdfContext);
}
}
Run Code Online (Sandbox Code Playgroud)
它会创建所需数量的页面,但会错误地放置内容.下图解释了它.
我的代码有什么问题吗?
我认为您不需要将 PDF 翻转的代码。我之前已经这样做过(手动分页,但没有滚动视图)并且从未需要垂直翻转上下文。我主要担心的是,您在每次迭代中都执行此操作 - 如果您有充分的理由翻转它,则您可能不需要在循环中使用它,而只需在循环开始之前执行一次。此外,代码CGContextTranslateCTM(pdfContext,0,-ty);可能需要替换为CGContextTranslateCTM(pdfContext,0,heightOfPdf);
如果这不起作用,请尝试UIGraphicsBeginPDFPage();代替CGContextBeginPage(),这是您的代码和我的代码之间唯一的主要区别。
| 归档时间: |
|
| 查看次数: |
1372 次 |
| 最近记录: |