如何在将pdf文档保存到iOS Files应用程序时指定文件名



使用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",用户可以更改该名称。

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

不是一个真正的答案,而是我找到的一个变通方法:

与其使用PDF的内存副本data,我可以将其写入app-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"显示为默认文件名。

只是一个额外的帮助。

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

当viewController解除时,我调用此函数。

FYI

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)")
}
}

相关内容

最新更新