UIMarkupTextPrintFormatter
を使用して、アプリケーションからHTMLを印刷しています。プリント・フォーマッタ・プリントをページ全体に印刷させると効果的です。UIPrintFormatterから正確なpageCountを取得する方法
しかし、私はページの半分に印刷するフォーマッタを制限したい - 私は用紙サイズを知っていれば、私はcontentInsets
プロパティを設定し、これを達成するために(UIPrintInteractinControllerDelegate
メソッド- (UIPrintPaper *)printInteractionController: (UIPrintInteractionController *)pic choosePaper:(NSArray *)paperList
が呼び出されたときに、私はcontentInsetsを設定します。)
これも機能します。印刷はcontentInsetsで定義されたページの領域に正しく制限されています。
しかし、印刷されたページ数が間違っています。私が得るページ数は、印刷ジョブがデフォルトのcontentInsets(0,0,0,0)を使用していたかのようです。
正しいページ数を印刷するにはどうすればよいですか?そして、UIMarkupTextPrintFormatter
のpageCount
プロパティはいつも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;
}