2015-12-03 2 views
0

Я новичок в Swift, поэтому, пожалуйста, со мной. У меня есть проект, связанный с открытием PDF-файлов. Он устанавливается в Info.plist. Когда я получаю PDF-вложение по электронной почте, я могу держать палец в приложении PDF, а затем «Открыть в» в своем приложении. В моей AppDelegate, у меня есть следующие добавления:Сохранить входящий PDF в WebView для памяти

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool { 
    incomingTransfer = URL 
    return true 
} 

incomingTransfer является Global Variable объявлена ​​в другом ViewController как NSURL. У этого ViewController также есть UIWebView, и загружается incomingTransfer, и я могу видеть новый PDF-файл. Моя цель - иметь кнопку, которая позволяет пользователю сохранять входящий PDF в формате PDF. У меня проблемы с этим. Я думал, что все это выяснилось, но это не спасение как PDF, а скорее как String. Может кто-то мне помочь, пожалуйста? Моя цель - сохранить входящий файл PDF в формате PDF в память приложения, желательно в DocumentDirectory. Мне сложно преобразовать Objective C в Swift. Мой первоначальный код для его сохранения был:

let html = String(incomingFileTransfer) 
    let fmt = UIMarkupTextPrintFormatter(markupText: html) 

    let render = UIPrintPageRenderer() 
    render.addPrintFormatter(fmt, startingAtPageAtIndex: 0) 

    let page = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4, 72 dpi 
    let printable = CGRectInset(page, 0, 0) 

    render.setValue(NSValue(CGRect: page), forKey: "paperRect") 
    render.setValue(NSValue(CGRect: printable), forKey: "printableRect") 

    let pdfData = NSMutableData() 
    UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, nil) 

    for i in 1...render.numberOfPages() { 

     UIGraphicsBeginPDFPage(); 
     let bounds = UIGraphicsGetPDFContextBounds() 
     render.drawPageAtIndex(i - 1, inRect: bounds) 
    } 

    UIGraphicsEndPDFContext(); 

    recipeFileName = fileName.text! 

    print("File Name Entered: \(recipeFileName)") 

    let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] 

    pdfData.writeToFile("\(documentsPath)/\(recipeFileName).pdf", atomically: true) 

ответ

1

Я понял. Я создал class под названием «PDFFile». Внутри «PDFFile» находятся два variables, называемые var name: String и var url: NSURL. В моем «IncomingTransfer» ViewController у меня есть «save» button. Создайте и сохраните новый файл с введенным именем из UITextField, а входящийURL, указанный в моем AppDelegate, назначен urlvariable. Оба затем сохраняются в классе PDFFile, используя NSCoding. Затем я установил UITableView для его dataSource из PDFFile Classarray данные. Я создал segue, когда пользователь нажимает на UITableViewCell и отправляется на новый ViewController с UIWebView. Этот WebView загружает PDF с urlRequest с использованием указанной переменной url, сохраненной с NSCoding.

AppDelegate Код:

// Allows incoming file access (PDF) 
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool { 

    // Transfer incoming file to global variable to be read 

    if url != "" { 

     // Load from Mail App 

     incomingFileTransfer = url 

     incomingStatus = "Incoming" 

    } else { 

     // Regular Load 

     print("App Delegate: No incoming file") 

     incomingFileTransfer = nil 

    }   

    return true 
} 

IncomingFile код и сохранить button код:

// MARK: Properties 
var file: PDFFile? 

// MARK: Actions 
// Save Button 
let name = fileName.text ?? "" 

let url = incomingFileTransfer 

file = PDFFile(name: name, url: url) 


// MARK: NSCoding 
func saveFiles() { 

    let isSuccessfulSave = NSKeyedArchiver.archiveRootObject(pdfFiles, toFile: PDFFile.ArchiveURL.path!) 

    if !isSuccessfulSave { 

     print("Failed to save PDF file") 

    } 

} 

Просмотр сохраненных входящих Pdf Later ViewController код: // МАРК: Свойства @IBOutlet слабый вар pdfItemWebView: UIWebView !

var incomingURL: NSURL! 

// Within ViewDidLoad 
    if let file = file { 

     pdfFileName.text = file.name 

     incomingURL = file.url 

     print("Saved URL: \(incomingURL)") 

     print("Pending load...") 

     let request = NSURLRequest(URL: incomingURL!) 

     pdfItemWebView.loadRequest(request) 

    } 

Это было сложно, но работало для меня. Там может быть более простой способ, но это то, что я выяснил, и его работы для моих нужд.

Смежные вопросы