как дать pdfData имя файла для пользователя, чтобы сохранить Swift - PullRequest
0 голосов
/ 23 сентября 2018

Я передаю свои pdfData пользователю для сохранения.Он может сохранять файлы и создавать файлы, но имя файла PDF по умолчанию: PDF document.pdf.Я хочу свое собственное имя файла, если это возможно.Возможно, я могу изменить имя файла в pdfData, прежде чем передать pdfData в UIActivityViewController?

Вот мой код

    // Create page rect
    let pageRect = CGRect(x: 0, y: 0, width: 595.28, height: 841.89) // A4, 72 dpi

    // Create PDF context and draw
    let pdfData = NSMutableData()

    UIGraphicsBeginPDFContextToData(pdfData, pageRect, nil)
    UIGraphicsBeginPDFPage()

    // From here you can draw page, best make it in a function
    PdfErstellung.PdfErstellen(auswahlZeilen, vitalstoffWerteListe, heuteString)

    UIGraphicsEndPDFContext()

    // Save pdf DATA through user
    let activityViewController = UIActivityViewController(activityItems: [pdfData], applicationActivities: nil)
    activityViewController.popoverPresentationController?.sourceView = self.view // für IPAD nötig
    self.present(activityViewController, animated: true, completion: nil)

- ОБНОВЛЕНИЕ -

Моя новая идея istсначала попытайтесь сохранить файл и попробуйте URL, а если это не удастся, то используйте pdfData напрямую, потому что в некоторых симуляторах использование URL не дает ошибок, а в других - ошибок.

Подробнее здесь: https://stackoverflow.com/a/52499637/10392572

1 Ответ

0 голосов
/ 23 сентября 2018

Вам просто нужно сохранить свои pdfData во временный fileURL и поделиться этим URL.

let temporaryFolder = FileManager.default.temporaryDirectory
let fileName = "document.pdf"
let temporaryFileURL = temporaryFolder.appendingPathComponent(fileName)
print(temporaryFileURL.path)  // /Users/lsd/Library/Developer/XCPGDevices/E2003834-07AB-4833-B206-843DC0A52967/data/Containers/Data/Application/322D1F1D-4C97-474C-9040-FE5E740D38CF/tmp/document.pdf
do {
    try pdfData.write(to: temporaryFileURL)
    // your code
    let activityViewController = UIActivityViewController(activityItems: [temporaryFileURL], applicationActivities: nil)
} catch {
    print(error)
}
...