2012-02-08 3 views
2

Я использую UIMarkupTextPrintFormatter напечатать некоторый HTML из моего приложения. Он отлично работает, если я разрешаю печатать форматирование на всю страницу.Как получить точный PAGECOUNT от UIPrintFormatter

Но я хочу, чтобы ограничить форматировщик для печати на одной половине страницы - и для достижения этой цели я поставил contentInsets свойство, как только я знаю, размер бумаги (я установил contentInsets когда UIPrintInteractinControllerDelegate метод - (UIPrintPaper *)printInteractionController: (UIPrintInteractionController *)pic choosePaper:(NSArray *)paperList называется.)

Это тоже работает - печать правильно ограничена областью страницы, определенной с помощью содержимогоInsets.

Но количество напечатанных страниц неправильно. Количество страниц, которые я получаю, похоже на то, что задание на печать использовало контент contentInsets по умолчанию (0,0,0,0).

Как я могу получить его, чтобы напечатать нужное количество страниц? И почему свойство pageCount на UIMarkupTextPrintFormatter всегда возвращает 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. Это не совсем такая проблема, но она отвечает на многие связанные вопросы, которые нужно решить кому-то, кто пытается решить проблемы с печатью.

Смежные вопросы