2011-04-28 142 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