Я создаю многостраничный HTML-документ, который хочу отправить на принтер Airprint из своего приложения. Каждая страница является дискретной и должна начинаться на отдельном листе.
Это должно быть относительно просто — за содержимым каждой страницы сразу следует элемент div
, имеющий display: block; page-break-after: always;
Вот простой пример:
<html>
<head>
<title>Printing with Page Breaks</title>
<style type="text/css">
@media screen or print {
div.pageb { display: block; page-break-after: always; }
}
</style>
</head>
<body>
<h1>Page 1</h1>
<p>Lorem ipsum dolor sit amet...</p>
<div class="pageb"></div> <!-- should page break here! -->
<h1>Page 2</h1>
<p>Lorem ipsum dolor sit amet...</p>
<div class="pageb"></div> <!-- should page break here! -->
<h1>Page 3</h1>
<p>Lorem ipsum dolor sit amet...</p>
<div class="pageb"></div> <!-- should page break here! -->
</body>
</html>
Этот документ отлично распечатывается в Safari и Chrome, которые размещают все разрывы страниц там, где они должны быть. Однако в iOS разрывы страниц не вставляются.
Чтобы распечатать HTML, я использую UIPrintInteractionController
для печати содержимого UIWebView
с помощью UIViewPrintFormatter
. Что-то вроде этого:
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
controller.printInfo = printInfo;
UIWebView *webViewPrint = [[UIWebView alloc] init];
[webViewPrint loadHTMLString:printHTML baseUrl:@"/"];
UIViewPrintFormatter *viewFormatter = [webViewPrint viewPrintFormatter];
controller.printFormatter = viewFormatter;
controller.showsPageRange = NO;
[controller presentAnimated:YES completionHandler:completionHandler];
Все это кажется очень стандартным, и мне остается только удивляться, почему разрывы страниц печатаются правильно в других браузерах Webkit, но не в UIWebView. Любые идеи о том, как сделать разрывы страниц на iOS?