Поделиться PDF с NSData через Share Sheet

Файл PDF генерируется на веб-сервере и принимается как NSData. Swift может распечатать этот объект NSData; тем не менее, он не распознается на листе общего доступа другими приложениями, которые обычно принимают PDF-файлы, такими как Google Drive. Единственные параметры, показанные на листе общего доступа, предназначены для печати и копирования.

Я пробовал следующее безрезультатно:

let dataProvider = CGDataProviderCreateWithCFData(pdfObject)
let pdf = CGPDFDocumentCreateWithProvider(dataProvider)
return pdf!

Согласно комментарию sbarow, я также попробовал следующее, но retrievePDFFromDisk функция возвращает ноль:

func writePDFToDisk () {
    var docURL = (NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)).last! as NSURL
    docURL = docURL.URLByAppendingPathComponent( "myDocument.pdf")
    pdfObject.writeToURL(docURL, atomically: true)
}

func retrievePDFFromDisk () -> AnyObject {
    let pdf = NSBundle.mainBundle().URLForResource("myDocument", withExtension: "pdf")
    return pdf!
}

Как эти данные могут быть надлежащим образом объявлены в виде PDF для других приложений из общего листа?

1 ответ

Успех! Смотрите ниже код:

func writePDFToDisk () {
    var docURL = (NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)).last! as NSURL
    docURL = docURL.URLByAppendingPathComponent( "myDocument.pdf")
    pdfObject.writeToURL(docURL, atomically: true)
}

func retrievePDFFromDisk () -> AnyObject {
    var docURL = (NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)).last! as NSURL
    docURL = docURL.URLByAppendingPathComponent( "myDocument.pdf")
    return docURL
}

В моем случае это можно упростить до следующего:

func getPDFAsFile (pdfData:NSData) -> AnyObject {
    var docURL = (NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)).last! as NSURL
    docURL = docURL.URLByAppendingPathComponent( "myDocument.pdf")
    pdfData.writeToURL(docURL, atomically: true)
    return docURL
}
Другие вопросы по тегам