2

UIMarkupTextPrintFormatterアプリから HTML を印刷するために を使用しています。印刷フォーマッターにページ全体を印刷させるとうまくいきます。

しかし、フォーマッタをページの半分に印刷するように制限したいと考えています。これを達成するためにcontentInsets、用紙サイズがわかったらプロパティを設定します (UIPrintInteractinControllerDelegateメソッド- (UIPrintPaper *)printInteractionController: (UIPrintInteractionController *)pic choosePaper:(NSArray *)paperListが呼び出されるときに contentInsets を設定します)。

これも機能します。印刷は、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