将字节数组转换为PDF文件?

时间:2015-06-29 13:44:25

标签: ios swift cocoa-touch pdf

我从iOS应用程序进行RESTful调用以检索pdf文件。此pdf文件采用字节格式。

我发现很多关于如何将这些字节转换为Objective-C中的实际文件的文章;但是,我需要Swift语言的帮助。

RESTful调用还返回其他内容,而不仅仅是文件字节,所以我从调用中返回的其他信息中提取字节。

let fileBlob = json["fileBlob"] as! String 
var data: NSData = NSPropertyListSerialization.dataWithPropertyList(fileBlob, format: NSPropertyListFormat.BinaryFormat_v1_0, options: Int(NSPropertyListMutabilityOptions.MutableContainersAndLeaves.rawValue), error: nil)! 
let file = data.writeToFile("readingfile.pdf", atomically: false) 

上面是我用来从返回的内容中提取文件字节的代码,然后将该文件写入我的计算机,看看我是否可以打开pdf。

这三行创建了文件,但是当我点击文件打开它时,它说它无法打开,因为它可能已损坏或使用预览不识别的文件格式......

1 个答案:

答案 0 :(得分:0)

您需要使用NSURLSession异步执行此操作:

func load(URL: NSURL) {
   let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration()
   let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)
   let task = session.dataTaskWithURL(URL, completionHandler: {
       (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
      if (error == nil) {
         // Success
         let statusCode = (response as! NSHTTPURLResponse).statusCode
         println("Success: \(statusCode)")
         println("File Size: \(data.length)")

         // Your file variable is data (see previous println with data.length as example)

      } else {
        // Failure
        println("Failure: %@", error.localizedDescription);
      }
   })
   task.resume()
}

然后你可以这样称呼它:

if var URL = NSURL(string: "http://www.whatever.com/yourfile.pdf") {
   load(URL)
}

如果您想在游乐场中进行测试,则需要在游乐场代码中使用以下两个语句:

import XCPlayground

XCPSetExecutionShouldContinueIndefinitely()