【问题标题】:Generating a PDF using the new printing stuff in iOS 4.2使用 iOS 4.2 中的新打印内容生成 PDF
【发布时间】:2011-05-20 09:03:51
【问题描述】:

从历史上看,我的应用程序以纯 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?非常感谢任何帮助。

【问题讨论】:

    标签: iphone pdf-generation ios-4.2 airprint


    【解决方案1】:

    似乎打印格式化程序(包括 UIMarkupTextPrintFormatter)直到打印之前才真正呈现/绘制,一旦系统接管并开始打印作业。 (Apple 的文档说 drawRect: 在打印之前被调用以提供打印作业的内容。)

    请有人证明我错了,因为我需要做基本相同的事情:)

    【讨论】:

    • Ehhhhhh .... 真可惜。看起来你不能轻易劫持打印格式化程序来做内存中的事情。
    • 听起来 Apple 的雷达已经准备就绪 :)
    • 同意。你提交雷达了吗?如果有,雷达编号是多少?我也会提交。
    • 其实我没有提交雷达...之前没有提交过,被其他东西淹没了
    • 几天前我提交了一个 Apple 开发者技术支持 (DTS) 请求,那个人回复我说是的,这是不可能的,并指示我提交一个功能请求.我的错误号是 8793893。
    【解决方案2】:

    我在我的一个应用程序中执行此操作。在此处查看我对类似问题的回答:

    Is there any way to generate PDF file from a XML/HTML template in iOs

    【讨论】:

      【解决方案3】:

      我发现:如果您愿意或允许使用私有 API,这是可能的。 (例如,在企业应用中。)

      方法: 像往常一样创建格式化程序;将其安装在 UIPrintPageRenderer 中。

      适当设置渲染器的私有属性paperRectprintableRect

      numberOfPages 现在可以使用了!

      像平常一样设置您的 pdf cgcontext,并使用渲染器的drawPageAtIndex:inRect: 方法绘制页面。天哪,它奏效了。

      强制声明:是的,我知道 Apple 不希望您提交调用(例如)[ppr setValue:[NSValue valueWithCGRect:page] forKey:@"paperRect"]; 并将它们退回的应用程序。

      【讨论】:

      • 感谢您提供的信息 - 很想知道 Apple 是如何做到这一点的,希望他们能在未来的某个版本中公开此信息...
      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 2011-09-23
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 2012-12-04
      相关资源
      最近更新 更多