将pdf文档保存到iOS Files App时如何指定文件名?

Posted

技术标签:

【中文标题】将pdf文档保存到iOS Files App时如何指定文件名?【英文标题】:How to specify a filename when saving pdf document to iOS Files App? 【发布时间】:2020-03-15 02:53:07 【问题描述】:

我使用 PDFKit 在我的应用程序中创建了一个 pdf 文档。我可以成功地在预览中显示它,并从预览控制器中使用以下代码向用户展示共享操作:

@objc func shareAction(_ sender: UIBarButtonItem)

    if let data = documentData
    
        let vc = UIActivityViewController(activityItems: [data], applicationActivities: [])
        present(vc, animated: true, completion: nil     
    

documentData 包含创建的 pdf 文档。

当用户选择“保存到文件”时,文档将获得默认名称“PDF Document.pdf”,用户可以更改该名称。

如何提供不同的默认文件名?

【问题讨论】:

【参考方案1】:

不是真正的答案,而是我想出的解决方法:

而不是使用 PDF 的内存中副本data,我可以将其写入应用程序 tmp 文件夹:

var fileURL : URL?
do

    let filename = "myfilename.pdf"
    let tmpDirectory = FileManager.default.temporaryDirectory
    fileURL = tmpDirectory.appendingPathComponent(filename)
    try data.write(to: fileURL!)

catch

    print ("Cannot write PDF: \(error)")

共享操作将如下所示:

@objc func shareAction(_ sender: UIBarButtonItem)

    if let url = fileURL
    
        let vc = UIActivityViewController(activityItems: [url], applicationActivities: [])
        present(vc, animated: true, completion: nil     
    

现在,当用户选择“保存到文件”操作时,“myfilename.pdf”会显示为默认文件名。

【讨论】:

【参考方案2】:

只是一个额外的帮助。

你最好在适当的时候删除tmp目录下的PDF文件。

当 viewController 关闭时我调用这个函数。

仅供参考

func deleteAllPDFs() 
    let predicate = NSPredicate(format: "self ENDSWITH '.pdf'")
    let defaultFileManager = FileManager.default

    do 
        let tmpDirURL = defaultFileManager.temporaryDirectory
        let contents = try defaultFileManager.contentsOfDirectory(atPath: tmpDirURL.path)
        let pdfs = contents.filter  predicate.evaluate(with: $0) 
        try pdfs.forEach  file in
            let fileUrl = tmpDirURL.appendingPathComponent(file)
            try defaultFileManager.removeItem(at: fileUrl)
        
    
    catch 
        print ("Failed to delete PDF with error: \(error)")
    

【讨论】:

是的,谢谢指出。我正在删除 viewcontrollers deinit 中的临时文件,但没有提及。

以上是关于将pdf文档保存到iOS Files App时如何指定文件名?的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发中,将word,excel,pdf等文档的二进制流保存到本地(iPhone或iPad)的问题

如何将文档文件保存到 iOS 中的 SQLite 数据库,以便稍后在程序中查看它们?

使用 Swift 5 - PDFKit 在 iOS 中编辑和保存现有的 pdf 文档

如何在 Swift 中从 NSData 显示 PDF - 如何将 PDF 保存到文档文件夹 Swift - 如何在 Swift 中通过 WebView 从保存的 NSData 显示 PDF

如何在 Swift 中将文件写入位于 Apple Files App 中的文件夹

ios 13.1 无法将文件保存到 App Directory