gpt4 book ai didi

ios - 将 WebView 中传入的 PDF 保存到内存

转载 作者:行者123 更新时间:2023-11-29 01:25:24 25 4
gpt4 key购买 nike

我有一个与打开 PDF 文件相关的项目。这是在 Info.plist 中设置的。当我在电子邮件中收到 PDF 附件时,我可以将手指放在 PDF 附件上,然后在我的应用程序中“打开方式”。在我的 AppDelegate 中,我添加了以下内容:

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)

最佳答案

我想通了。我创建了一个名为“PDFFile”的。在“PDFFile”中有两个变量,名为var name: Stringvar url: NSURL。在我的“IncomingTransfer”ViewController 中,我使用“保存”按钮 创建并保存新文件,并使用来自 UITextField 的键入名称和在我的 AppDelegate 中指定的 incomingURL 被分配给 url 变量。然后使用 NSCoding 将两者保存到 PDFFile 类。然后,我从 PDFFile Class array 数据中为它的 dataSource 设置了一个 UITableView。当用户点击 UITableViewCell 时,我创建了一个 segue,它会转到一个带有 UIWebView 的新 ViewController。此 WebView 使用从 NSCoding 保存的指定 url 变量从 urlRequest 加载 PDF。

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 代码: //标记:属性 @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)

}

这很复杂,但对我有用。可能有更简单的方法,但这是我想出的方法,它可以满足我的需求。

关于ios - 将 WebView 中传入的 PDF 保存到内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34075974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com