Настройка страниц для печати для UIPrintPageRenderer / UIPrintInteractionController
У меня есть строка HTML для печати с использованием AirPrint в моем приложении iOS. Тем не менее, строка настраивается, и пользователю разрешено устанавливать поля / отступы, шрифт / размер шрифта, ориентацию и т. Д.
Таким образом, иногда вывод может быть более 2 страниц, где вторая страница пуста. Там я хочу установить диапазон страниц для печати. На самом деле, я просто хочу напечатать только первую страницу независимо от того, какой вывод.
Вот диалоговое окно контроллера взаимодействия с печатью, вы можете видеть, что диапазон не задан, а результат - более одной страницы:
И вот мой код:
// create an html output text
let markupText = "<div style='width: 100%; text-align: center;'><div style='display: inline-block; margin-top: 35mm; margin-left: 45mm;'>Hello, printer.</div></div>"
// initialize print formatter
let formatter = UIMarkupTextPrintFormatter(markupText: markupText)
formatter.contentInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
formatter.startPage = 0
// initialize print renderer and set its formatter
let printRenderer = UIPrintPageRenderer()
printRenderer.addPrintFormatter(formatter, startingAtPageAtIndex: 0)
printRenderer.prepareForDrawingPages(NSMakeRange(0, 1))
// initialize print controller to present print dialog
let printController = UIPrintInteractionController.sharedPrintController()
printController.printPageRenderer = printRenderer
printController.presentAnimated(true, completionHandler: nil)
Я не смог найти достаточно информации о настройке диапазона, хотя думал, что prepareForDrawingPages
метод сделает свое дело. Есть идеи по поводу этого?
1 ответ
Если вы хотите использовать пользовательский подкласс UIPrintPageRenderer
есть также numberOfPages
Метод, который вы можете изменить, чтобы рассчитать количество страниц. Тем не менее, я считаю, что вы можете просто забыть установить UIPrintInteractionController
имущество showsPageRange
в YES
,
Я решил это, написав свой HTML в PDF (NSData
) и настройка printingItem
свойство этого элемента. Мой код в target-c, но применяется тот же принцип.