当使用UIMarkupTextPrintFormatter打印几行简单的HTML时,它首先输出一个空白页,然后是带有文本的页面。代码如下,非常简单:
- (void) printSomething;
{
if (![UIPrintInteractionController isPrintingAvailable])
return;
NSString* markupText =@"<html><body>THIS IS A TEST</body></html>";
UIMarkupTextPrintFormatter* printFormatter =[ [ [UIMarkupTextPrintFormatter alloc] initWithMarkupText:markupText] autorelease];
UIPrintInteractionController* printInteractionController =[UIPrintInteractionController sharedPrintController];
printInteractionController.printFormatter =printFormatter;
printInteractionController.delegate =self;
//printInteractionController.showsPageRange =YES;
[printInteractionController presentAnimated:YES completionHandler:nil];
}
现在,如果我取消注释 showsPageRange = YES ,则会按预期打印单个页面,但UIPrintInteractionController需要几秒钟才能显示。足以让用户想知道应用程序是否冻结。
UIMarkupTextPrintFormatter文档的第一行说明“ UIMarkupTextPrintFormatter类的实例为多页打印作业布置HTML标记文本”。如果格式化程序打印多个页面,无论内容如何都有点疯狂......
知道这里有什么问题吗?其他应用程序没有任何问题。提前谢谢。
答案 0 :(得分:6)
我通过使用正确的HTML骨架解决了这个问题:
NSString *htmlString = "<!DOCTYPE html><html><head><meta charset='UTF-8'><title>Title</title></head><body>Hello!</body></html>"
答案 1 :(得分:4)
我在使用printInteractionController.showsPageRange = NO;
出现第二个空白页时出现了同样的问题,并找到了Apple示例here(第67页)。这是它:
- (IBAction)printContent:(id)sender {
UIPrintInteractionController *pic = [UIPrintInteractionController
sharedPrintController];
pic.delegate = self;
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
printInfo.jobName = self.documentName;
pic.printInfo = printInfo;
UIMarkupTextPrintFormatter *htmlFormatter = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:self.htmlString];
htmlFormatter.startPage = 0;
htmlFormatter.contentInsets = UIEdgeInsetsMake(72.0, 72.0, 72.0, 72.0); // 1 inch margins
pic.printFormatter = htmlFormatter;
pic.showsPageRange = YES;
void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
^(UIPrintInteractionController *printController, BOOL completed, NSError
*error) {
if (!completed && error) {
NSLog(@"Printing could not complete because of error: %@", error);
} };
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[pic presentFromBarButtonItem:sender animated:YES
completionHandler:completionHandler];
} else {
[pic presentAnimated:YES completionHandler:completionHandler];
}
}
此示例使用printInteractionController.showsPageRange = YES;
,并且工作正常,但是如果用
printInteractionController.showsPageRange = NO;
,它打印额外的第二个空白页。
所以似乎UIMarkupTextPrintFormatter
隐含意图与printInteractionController.showsPageRange = YES;
一起使用,或者它只是一个API错误。
答案 2 :(得分:0)
我遇到了同样的问题,我发现它是由html代码引起的
style='page-break-after:always;
答案 3 :(得分:0)
正如@Hassy在他的回答中提到的那样,问题可能出在html / css代码上。
就我而言,我正在设置html, body {min-height: 100%;}
,该设置在某些边距/边距处可能效果不佳,但是问题可能与css有关。
将background-color
设置为body
将有助于检查这是否确实是问题所在(如果颜色在“空白”页面上重叠,则问题在于样式)。