我有一个使用WebViews显示URL列表的iPad应用程序。我希望能够一次打印所有WebView,而不会使用PrintInteractionController多次提示用户。问题是PrintInteractionController似乎没有能力这样做。您无法分配多个viewFormatters,并且WebView不会被识别为printItems。我也找不到只打印项目而不显示PrintInteractionController的方法。
有谁知道这样做的方法?
干杯。
答案 0 :(得分:1)
使用UIPrintIterationController对象的printPageRenderer
属性。您可以在UIPrintPageRenderer子类对象中设置多个UIPrintFormatter子类。
答案 1 :(得分:0)
这是一个老问题,但我花了几天时间在Apple文档和示例代码中搜索答案并发表一些误导性评论。所以,我在这里坚持这一点,以便在我浪费的那些日子里拯救下一个人。
具体问题是: 如何在一个给UIPrintInteractionController的打印作业中编写可以打印多个UIPrintPageRenderer
的{{1}}?
使用此Apple示例代码PrintWebView,您可以使用不涉及将所有内容转换为PDF的解决方案。此文档也将帮助一些人:UIPrintPageRenderer。问题是示例应用和UIWebViews
的文档建议如果您通过此属性添加多个UPPrintPageRenderer
:
UIPrintFormatter
Apple为PrintWebView中覆盖@property(nonatomic,copy) NSArray <UIPrintFormatter *> *printFormatters
的方法提供的示例代码将 正常工作 并找出正确的页数。 .. 没有!
您需要做的是通过下面显示的方法以非显而易见的方式添加-(NSInteger)numberOfPages
,然后更正其各自的startPage属性并共同使用这些属性来计算UIPrintPageRenderer返回的正确pageCount。相反,使用这个:
printFormatters
为什么这样做而另一个没有?不知道,可能是一个错误....我应该提交 雷达 :)但是感谢 @Mustafa 和其他{{3} }:
以下是在一个打印作业中打印多个UIWebView的步骤:
-(void)addPrintFormatter:(UIPrintFormatter *)formatter startingAtPageAtIndex:(NSInteger)pageIndex
以在 webView上设置所需的属性你给它的.viewPrintFormatters 。UIPrintPageRenderer
[addPrintFormatter:startingAtPageAtIndex:]
UIPrintPageRenderer
方法中,从每个格式化程序中获取pageCount,并使用它来更新startPage和总页数值。以下是基本代码大纲(仅供参考:此解决方案适用于部署目标为 iOS 9.0 的应用程序):
像这样定义你的UIPrintPageRenderer类(你真的不需要-(NSInteger)numberOfPages
方法,但在我的用例中我在那里设置值我总是想要那样):
init
在处理要打印的UIWebViews的打印操作的 Controller 中,执行以下操作:
@interface MyPrintPageRenderer : UIPrintPageRenderer
@end
@implementation MyPrintPageRenderer
-(id)init
{
self = [super init];
if(self) {
self.headerHeight = 0;
self.footerHeight = 0;
}
return self;
}
//
// Set whatever header, footer and insets you want. It is
// important to set these values to something, so that the print
// formatters can figure out their own pageCounts for whatever
// they contain. Look at the Apple sample App for PrintWebView for
// for more details about these values.
//
-(NSInteger)numberOfPages
{
__block NSUInteger startPage = 0;
for(UIPrintFormatter *pf in self.printFormatters) {
pf.contentInsets = UIEdgeInsetsZero;
pf.maximumContentWidth = self.printableRect.size.width;
pf.maximumContentHeight = self.printableRect.size.height;
dispatch_async(dispatch_get_main_queue(), ^{
pf.startPage = startPage;
startPage = pf.startPage + pf.pageCount;
});
}
return [super numberOfPages];
}
@end
瞧!现在...... 正常工作 ;)