#swift #pdf
#swift #PDF
Вопрос:
Я не могу понять, как создавать разрывы страниц для создаваемого мной PDF-файла, я пробовал несколько разных методов создания PDF-файла, и все они получаются одинаковыми. Я пытаюсь создать PDF для длинной многострочной метки.
Когда я пытаюсь напечатать только строку через UIActivityView, она отлично работает с разрывами страниц, как и следовало ожидать. Однако, когда я пытаюсь сохранить или распечатать PDF-файл, в предварительном просмотре печати или при сохранении PDF отображается только одна страница.
Как мне включить весь мой текст в PDF?
Вот моя функция share, вызывающая только PDF прямо сейчас для UIActivityView
// Share function for share button
@objc func shareTapped() {
// Create printable string
let printableString = "Line measurement: (sizeTransfer.text ?? "No data")nCalculated size: (heightSizeTransfer.text ?? "No data")nHeight: (heightTransfer.text ?? "No data")n nCoursing results:n n (calcOutput.text ?? "No data")"
// String print formatting
let attrs = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 12), NSAttributedString.Key.foregroundColor: UIColor.black]
let str = NSAttributedString(string: printableString, attributes: attrs)
let print = (UISimpleTextPrintFormatter(attributedText: str))
// Saving string file
let tempDir = FileManager.default.temporaryDirectory
let stringFileName = "Coursing Printout"
let tempStringDir = tempDir.appendingPathComponent(stringFileName)
try? printableString.write(to: tempDir, atomically: true, encoding: String.Encoding.utf8)
// Create PDF
let pageRect = CGRect(x: 0, y: 0, width: 612, height: 792)
let renderer = UIGraphicsPDFRenderer(bounds: pageRect)
let text = printableString
let textAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 12)]
let formattedText = NSAttributedString(string: text, attributes: textAttributes)
let data = renderer.pdfData { ctx in
ctx.beginPage()
formattedText.draw(in: pageRect.insetBy(dx: 50, dy: 50))
}
// Give sharing functionality
let vc = UIActivityViewController(activityItems: [data], applicationActivities: [])
present(vc, animated: true)
vc.excludedActivityTypes = [.assignToContact, .addToReadingList]
}
Комментарии:
1. Как мне это сделать? Я прочитал много документации и искал повсюду, но не могу найти простого решения. Имейте в виду, что я все еще новичок в кодировании…
Ответ №1:
Я нашел это, наконец, после недели поиска!
Это самый простой и надежный способ разбить PDF!
https://pspdfkit.com/blog/2019/converting-attributed-string-to-pdf/
Комментарии:
1. Пожалуйста, напишите соответствующую информацию здесь. Ответы только по ссылкам бесполезны.
2. Разве это не было бы своего рода плагиатом, когда я не отдаю должное источнику?
3. Нет. Плагиатом было бы скопировать вставку сообщения здесь без изменений. В идеале, напишите короткий ответ своими словами. Вы можете сохранить ссылку для получения подробной информации.
4. да, это не школьное задание. это реальная жизнь. просто напишите ответ
5. Упс, я забыл об этом, я сделаю это завтра