2011-04-28 141 views
4

我使用以下代码打印包含文本和图像的HTML内容。打印纸张大小和内容

if (![UIPrintInteractionController isPrintingAvailable]) { 
    UIAlertView *alertView = [[[UIAlertView alloc] 
     initWithTitle:NSLocalizedString(@"Printer Availability Error Title", @"") 
     message:NSLocalizedString(@"Printer Availability Error Message", @"") 
     delegate:nil 
     cancelButtonTitle:NSLocalizedString(@"OK", @"OK") 
     otherButtonTitles:nil] autorelease]; 
    [alertView show]; 
    return; 
} 

UIPrintInteractionController *pic = 
    [UIPrintInteractionController sharedPrintController]; 

if(!pic) { 
    NSLog(@"Couldn't get shared UIPrintInteractionController!"); 
    return; 
} 

pic.delegate = self; 

UIPrintInfo *printInfo = [UIPrintInfo printInfo]; 
printInfo.outputType = UIPrintInfoOutputGeneral; 
printInfo.jobName = @"Sample"; 
pic.printInfo = printInfo; 

NSString *htmlString = [self prepareHTMLText]; 
UIMarkupTextPrintFormatter *htmlFormatter = 
    [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:htmlString]; 
htmlFormatter.startPage = 0; 
// 1-inch margins on all sides 
htmlFormatter.contentInsets = UIEdgeInsetsMake(72.0, 72.0, 72.0, 72.0); 
// printed content should be 6-inches wide within those margins 
htmlFormatter.maximumContentWidth = 6 * 72.0; 
pic.printFormatter = htmlFormatter; 
[htmlFormatter release]; 

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:self.myPrintBarButton 
     animated:YES 
     completionHandler:completionHandler]; 

} else { 
    [pic presentAnimated:YES completionHandler:completionHandler]; 
} 

查看附件的结果(缩小版本可能不是很清楚,但希望你能得到图片)。

这里是我的问题:

  1. 如何在打印纸的尺寸由AirPrint的决定?如果我想特别格式化和打印A4纸的数据会怎么样?

  2. 使用上面的代码和使用不同的模拟打印机(打印机模拟器)打印的结果是,在所有情况下,我在第一页的顶部获得1英寸的边距,但不是在连续的页面上。为什么?

  3. 使用上面的代码和使用不同的模拟打印机(打印机模拟器)打印的结果是,在某些情况下,字体样式会丢失。结果,内容向下移动。为什么?

Screen-shot

回答

8
  1. 为了具体选择A4纸张大小,我实现了<UIPrintInteractionControllerDelegate>协议的printInteractionController:choosePaper:方法,如果由打印机(试验用[UIPrintPaper bestPaperForPageSize:withPapersFromArray:]支持返回A4纸张大小。需要注意的是这里没有设置纵向/横向取向,而是由UIPrintInfo属性orientation

  2. 属性htmlFormatter.contentInsets仅在页面渲染器将页面分割为多个页面之前,才将整个内容的插图设置为整体。我能够通过UIPrintPageRenderer添加空白页眉和页脚,然后加入了1cm缘至HTML格式打印的左侧和右侧设置了1cm每个页边距:

    UIPrintPageRenderer *renderer = [[UIPrintPageRenderer alloc] init]; 
    renderer.headerHeight = 30.0f; 
    renderer.footerHeight = 30.0f; 
    pic.printPageRenderer = renderer; 
    [renderer release]; 
    
    UIMarkupTextPrintFormatter *htmlFormatter = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText: htmlString]; 
    htmlFormatter.startPage = 0; 
    htmlFormatter.contentInsets = UIEdgeInsetsMake(0.0f, 30.0f, 0.0f, 30.0f); 
    [renderer addPrintFormatter: htmlFormatter startingAtPageAtIndex: 0]; 
    [htmlFormatter release]; 
    
  3. 不禁这一个抱歉。

+2

如何返回A4纸张尺寸? – 2016-10-14 14:55:38