Как разбить PDF на страницы в swift

#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. Упс, я забыл об этом, я сделаю это завтра