2

我正在使用 aUIMarkupTextPrintFormatter从我的应用程序中打印一些 HTML。如果我让打印格式化程序打印到整个页面,效果会很好。

但是我想将格式化程序限制为在页面的一半上打印 - 为了实现这一点,我在contentInsets知道纸张大小后设置了属性(我在调用该UIPrintInteractinControllerDelegate方法时设置了 contentInsets - (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;
}
4

1 回答 1

0

你需要写一个 UIPrintPageRenderer 的子类。在子类 numberOfPages 方法中在 printFormatter 上设置各种指标后,您可以获得正确的页数。请参阅我在此处的示例代码的长答案。这不完全是这个问题,但它回答了许多试图解决打印问题的人需要得到的相关问题。

于 2016-03-04T16:42:06.970 回答