Настройка страниц для печати для UIPrintPageRenderer/UIPrintInteractionController

У меня есть строка HTML для печати с помощью AirPrint в моем приложении для iOS. Однако строку можно настраивать, и пользователю разрешено устанавливать поля/отступы, размер шрифта/шрифта, ориентацию и т. д.

Таким образом, иногда на выходе может быть более 2 страниц, где вторая страница пуста. Там я хочу установить диапазон страниц для печати. На самом деле, я просто хочу напечатать только первую страницу, независимо от того, что будет на выходе.

Вот диалоговое окно контроллера взаимодействия с печатью, вы можете видеть, что диапазон не установлен, а вывод состоит из более чем одной страницы:

Диалоговое окно UIPrintInteractionController

И вот мой код:

// 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 поможет. Любые идеи о том, как это сделать?


person kubilay    schedule 18.01.2016    source источник


Ответы (1)


Если вы хотите использовать собственный подкласс UIPrintPageRenderer, есть также метод numberOfPages, который вы можете переопределить для подсчета количества страниц. Однако я считаю, что вы можете просто забыть установить для свойства UIPrintInteractionController showsPageRange значение YES.

Я решил это, записав свой html в PDF (NSData) и установив свойство printingItem для этого элемента. Мой код находится в Objective-C, но применяется тот же принцип.

документация по элементу печати

Создание содержимого PDF

person cbay    schedule 19.01.2016
comment
Свойство numberOfPages доступно только для чтения: нельзя присвоить значение: вызов функции возвращает неизменяемое значение. Установил для showPageRange значение true, но ничего не изменилось, результат тот же. - person kubilay; 20.01.2016
comment
PDF вещь была хорошей идеей. Метод drawPageAtIndex UIPrintPageRenderer был успешным для создания одностраничного PDF-файла, поэтому после создания одностраничного PDF-файла все прошло хорошо. Создал файл с небольшой помощью gist.github.com/nyg/b8cd742250826cb1471f - person kubilay; 20.01.2016
comment
@kubilay numberOfPages также является методом, который вычисляет количество страниц, но вы должны создать собственный подкласс UIPrintPageRenderer, чтобы переопределить его. Я использовал собственный подкласс, пока не понял, что PDF-файл намного проще. Я отредактирую, чтобы признать, что это работает только в пользовательских подклассах. - person cbay; 21.01.2016