这是一个老问题,但我花了几天时间寻找答案,并遵循 Apple 文档和示例代码中的一些误导性评论。所以,我把这个放在这里是为了拯救下一个人我浪费的时间。
具体问题是:一个人如何写一个UIPrintPageRenderer
可以打印多个UIWebViews
在给 UIPrintInteractionController 的单个打印作业中?
您可以使用以下 Apple 示例代码,找到一种无需首先将所有内容转换为 PDF 的解决方案:打印网页视图。此外,该文档还将帮助一些人:UI打印页面渲染器。问题是示例应用程序和文档UPPrintPageRenderer
建议如果您添加多个UIPrintFormatter
通过此属性:
@property(nonatomic,copy) NSArray <UIPrintFormatter *> *printFormatters
苹果提供的示例代码用于重写该方法-(NSInteger)numberOfPages
in 打印网页视图 will 只是工作并找出正确的页数......Nope!
你要做的就是添加printFormatters
通过下面所示的方法以一种不明显的方式,然后更正它们各自的 startPage 属性,并共同使用这些属性来计算出 UIPrintPageRenderer 返回的正确 pageCount。相反,使用这个:
-(void)addPrintFormatter:(UIPrintFormatter *)formatter startingAtPageAtIndex:(NSInteger)pageIndex
为什么这个有效而另一个无效?不知道,可能是一个错误......我应该提交一个radar:) 但是感谢@Mustafa还有这个Stackoverflow 的提示答案:
以下是在一项打印作业中打印多个 UIWebView 的步骤:
- 按照 Apple 中的大纲进行操作打印网页视图上面引用的例子并写下你的
UIPrintPageRenderer
来设置你想要的属性webView.viewPrintFormatters你给它。
- 通过以下方式添加 printFormatters:
[addPrintFormatter:startingAtPageAtIndex:]
- In your
UIPrintPageRenderer
-(NSInteger)numberOfPages
方法从每个格式化程序获取 pageCount,并使用它来更新 startPage 和总页数值。
这是要遵循的基本代码大纲(仅供参考:此解决方案适用于以部署目标构建的应用程序iOS 9.0