Как получить точный счетчик страниц из UIPrintFormatter - PullRequest
2 голосов
/ 09 февраля 2012

Я использую UIMarkupTextPrintFormatter для печати некоторого HTML из моего приложения.Это прекрасно работает, если я позволю печатнику форматировать на всю страницу.

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

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

Но количество напечатанных страниц неверно.Количество страниц, которые я получаю, такое, как если бы задание на печать использовало 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;
}

1 Ответ

0 голосов
/ 04 марта 2016

Вам необходимо написать подкласс UIPrintPageRenderer. После того, как вы установите различные метрики в printFormatter в методе подклассов numberOfPages, вы можете получить правильное количество страниц. Смотрите мой длинный ответ с примером кода, расположенного здесь . Это не совсем эта проблема, но она отвечает на многие связанные вопросы, которые должен получить кто-то, пытающийся решить проблемы с печатью.

...