使用iOS 4.2中的新打印内容生成PDF

从历史上看,我的应用程序已将确认生成为纯HTML,并将该HTML传递给普通的MFMailComposeViewController,以便通过电子邮件发送给客户。我想尝试利用iOS 4.2中的新打印类将HTML呈现为PDF并将其作为附件发送。 我尝试了以下方法:
NSString *html = /* generate my HTML here */
NSMutableData *pdfData = [NSMutableData data];
UIMarkupTextPrintFormatter *fmt = [[UIMarkupTextPrintFormatter alloc] 
                                   initWithMarkupText:html];

// Render the html into a PDF
UIGraphicsBeginPDFContextToData( pdfData, CGRectZero, nil );

for (NSInteger i=0; i < [fmt pageCount]; i++)
{
    UIGraphicsBeginPDFPage();
    CGRect bounds = UIGraphicsGetPDFContextBounds();
    [fmt drawInRect:bounds forPageAtIndex:i];
}

UIGraphicsEndPDFContext();
问题是
[fmt pageCount]
总是返回零,因此实际的页面内容不会被渲染到PDF NSData中。 有没有人在实际打印作业之外使用UIMarkupTextPrintFormatter将HTML转换为PDF?任何帮助非常感谢。     
已邀请:
一旦系统接管并启动打印作业,似乎打印格式化程序(包括UIMarkupTextPrintFormatter)在打印之前才会实际呈现/绘制。 (Apple的文档说drawRect:在打印之前调用,以便为打印作业提供内容。) 有人请证明我错了,因为我需要基本上做同样的事情:)     
我在我的一个应用程序中执行此操作。在这里查看我对类似问题的回答: 有没有办法从iOs中的XML / HTML模板生成PDF文件     
我发现了一个问题:如果您愿意或允许使用私有API,这是可能的。 (例如,在企业应用程序中。) 方法: 像往常一样创建格式化程序;将其安装在UIPrintPageRenderer中。 适当地设置渲染器的私有属性
paperRect
printableRect
numberOfPages
现在有效! 像普通一样设置pdf cgcontext,并使用渲染器的
drawPageAtIndex:inRect:
方法绘制页面。圣牛,它的工作原理。 强制性抗议:是的,我知道Apple不希望你提交调用(例如)
[ppr setValue:[NSValue valueWithCGRect:page] forKey:@"paperRect"];
的应用程序并且会反弹它们。     

要回复问题请先登录注册