0

PDF ファイルを開くことに関連するプロジェクトがあります。これは で設定されますInfo.plist。電子メールで PDF の添付ファイルを受け取ったら、PDF の添付ファイルを指で押さえ、アプリで [開く] を選択できます。私のAppDelegateでは、次のものが追加されています。

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

incomingTransferとして別のGlobal Variable宣言されています。これにはとも含まれており、新しい PDF ファイルを表示できます。私の目標は、ユーザーが受信した PDF を PDF として保存できるボタンを用意することです。私はこれに問題があります。私はそれをすべて理解したと思っていましたが、PDFとして保存されていませんでしたが、. 誰か助けてくれませんか?私の目標は、受信した PDF ファイルを PDF としてアプリのメモリに保存することです。Objective C を Swift に変換するのに苦労しています。それを保存するための私の元のコードは次のとおりです。ViewControllerNSURLViewControllerUIWebViewincomingTransferStringDocumentDirectory

    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)
4

1 に答える 1

1

私はそれを考え出した。class「PDFFile」という名前を作成しました。「PDFFile」内にはvariables、 と という名前の 2 つの がvar name: Stringありvar url: NSURLます。私の 'IncomingTransfer' 内で、から入力された名前で新しいファイルを作成して保存しViewController、my で指定された incomingURLが に割り当てられます。両方とも、を使用してクラスに保存されます。次に、PDFFileデータからのものに設定します。ユーザーが をクリックすると を作成し、それが で新しいに移動します。これにより、 から保存された、指定された変数を使用してから PDF がロードされます。buttonUITextFieldAppDelegateurl variablePDFFileNSCodingUITableViewdataSourceClass arraysegueUITableViewCellViewControllerUIWebViewWebViewurlRequesturlNSCoding

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 の表示 後でViewControllerコード: // MARK: Properties @IBOutlet weak var 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)

    }

複雑でしたが、うまくいきました。もっと簡単な方法があるかもしれませんが、これが私が考え出したものであり、私のニーズに合っています。

于 2015-12-08T18:34:45.887 に答える