Поделиться 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
}