Добавьте нижний колонтитул, такой как «страница x of y» при создании PDF с использованием UIGraphicsPDFRenderer - PullRequest
0 голосов
/ 15 ноября 2018

Я работаю над функцией в моем приложении, которая позволяет пользователям экспортировать свои данные в красиво оформленный PDF.

Я использую UIGraphicsPDFRenderer для этого и прошёл документацию Apple .

У меня проблема с добавлением нижнего колонтитула типа "страница x of y". Хотя «х» легко - у меня проблемы с определением «у», так как я знаю только, сколько страниц в моем документе, после того как я полностью обработал PDF. Я не могу определить количество страниц заранее из-за довольно сложной верстки.

Теперь я также знаю, что новые страницы создаются с beginPage(). Есть ли способ перейти на предыдущую страницу? - Потому что тогда я мог бы просто просмотреть документ и добавить недостающий нижний колонтитул.

Вот код, который я использую (очень упрощенный, но этого должно быть достаточно, чтобы понять идею) в Swift 4:

let pdf = renderer.pdfData { (context) in
  let attributes = [ NSFontAttributeName : UIFont.boldSystemFont(ofSize: 15) ]
  // page 1
  context.beginPage()
  NSAttributedString(string: "Page 1", attributes: attributes).draw(in: CGRect(x: 0, y: 0, width: 500, height: 200))

  // page 2
  context.beginPage()
  NSAttributedString(string: "Page 2", attributes: attributes).draw(in: CGRect(x: 0, y: 0, width: 500, height: 200))

  // page 3
  context.beginPage()
  NSAttributedString(string: "Page 3", attributes: attributes).draw(in: CGRect(x: 0, y: 0, width: 500, height: 200))

  // Now that I know that the PDF will have 3 pages, add the footer on all 3 pages - but how?
  }
}

1 Ответ

0 голосов
/ 16 ноября 2018

UIGraphicsPDFRenderer - генератор PDF только вперед.У вас есть 2 варианта:

  1. Анализировать данные перед записью в pdf, чтобы определить, на скольких страницах они умещаются.Поскольку ваш код выполняет разрывы страниц, вы сможете вычислить, сколько страниц требуется для ваших данных.
  2. Создайте документ без «страницы x из y» и сохраните его.Создайте новый документ, откройте ранее сохраненный документ и нарисуйте его страницы на страницах нового документа, а затем добавьте «страницу x из y».

2 более громоздко и неэффективно, поэтому я бы выбрал 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...