2012-02-08 68 views
2

我使用UIMarkupTextPrintFormatter從我的應用打印一些HTML。如果我讓打印格式化程序打印到整個頁面,它會很好用。如何從UIPrintFormatter獲得精確的pageCount

但我想限制在頁面的一半格式打印 - 而實現這一點我設置contentInsets屬性一旦我知道紙張的尺寸(我設置contentInsets當UIPrintInteractinControllerDelegate方法- (UIPrintPaper *)printInteractionController: (UIPrintInteractionController *)pic choosePaper:(NSArray *)paperList被調用。)

這也適用 - 打印正確地限制到使用contentInsets定義的頁面區域。

但是打印頁數是錯誤的。我得到的頁數好像打印作業一直使用默認的contentInsets(0,0,0,0)。

我怎樣才能打印正確的頁數?爲什麼UIMarkupTextPrintFormatter上的pageCount屬性總是返回0?

這裏的打印作業設置代碼:

UIPrintInteractionController* pic = [UIPrintInteractionController sharedPrintController]; 
pic.delegate = self; 

UIPrintInfo* pi = [UIPrintInfo printInfo]; 
pi.orientation = UIPrintInfoOrientationLandscape; 
pi.outputType = UIPrintInfoOutputGrayscale; 
pi.duplex = UIPrintInfoDuplexNone; 
pic.printInfo = pi; 

UIMarkupTextPrintFormatter* mtpf = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText: myHTML ]; 
pic.printFormatter = mtpf; 

[pic presentAnimated: YES completionHandler:^(UIPrintInteractionController *printInteractionController, BOOL completed, NSError *error) 
{ 
}]; 

,並委託方法:

- (UIPrintPaper *)printInteractionController: (UIPrintInteractionController *)pic choosePaper:(NSArray *)paperList 
{ 
    // we want letter paper 
    UIPrintPaper* printPaper = [UIPrintPaper bestPaperForPageSize: CGSizeMake(612 , 792) withPapersFromArray: paperList]; 

    UIMarkupTextPrintFormatter* mtpf = (UIMarkupTextPrintFormatter*)pic.printFormatter; 

    CGFloat padding = (printPaper.paperSize.height - printPaper.printableRect.size.height)/2.0; 

    mtpf.contentInsets = UIEdgeInsetsMake(0, 0, 0, (printPaper.printableRect.size.height/2.0) + padding); 

    // always 0 ??? 
    NSLog(@"pageCount: %d", mtpf.pageCount); 

    return printPaper; 
} 

回答

0

你需要寫一個子類UIPrintPageRenderer的。在printFormatter中爲子類numberOfPages方法設置各種指標後,您可以獲得正確的頁數。 See my long answer with example code located here。這不完全是這個問題,但它回答了很多有關試圖解決打印問題的人需要得到的相關問題。

相關問題