2012-02-08 9 views
2

UIMarkupTextPrintFormatterを使用して、アプリケーションからHTMLを印刷しています。プリント・フォーマッタ・プリントをページ全体に印刷させると効果的です。UIPrintFormatterから正確なpageCountを取得する方法

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

これも機能します。印刷はcontentInsetsで定義されたページの領域に正しく制限されています。

しかし、印刷されたページ数が間違っています。私が得るページ数は、印刷ジョブがデフォルトのcontentInsets(0,0,0,0)を使用していたかのようです。

正しいページ数を印刷するにはどうすればよいですか?そして、UIMarkupTextPrintFormatterpageCountプロパティはいつも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のサブクラスを記述する必要があります。 numberOfPagesサブクラスメソッドのprintFormatterにさまざまなメトリックを設定すると、正しいページ数を取得できます。 See my long answer with example code located here。それはまさにこの問題ではありませんが、印刷問題を解決しようとする人が得る必要のある多くの関連する質問に答えます。

関連する問題