与UIActivityViewController 共享PDF - 文件名



我正在创建一个PDF并通过UIActivityViewController共享它。

func createFlyer() -> Data {
// 1
let pdfMetaData = [
kCGPDFContextCreator: "Flyer",
]
let format = UIGraphicsPDFRendererFormat() 
format.documentInfo = pdfMetaData as [String: Any]
// 2
let pageWidth = 8.5 * 72.0
let pageHeight = 11 * 72.0
let pageRect = CGRect(x: 0, y: 0, width: pageWidth, height: pageHeight)
// 3
let renderer = UIGraphicsPDFRenderer(bounds: pageRect, format: format)
// 4
let data = renderer.pdfData { (context) in
// 5
context.beginPage()
// 6
let attributes = [
NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 72)
]
let text = "I'm a PDF!"
text.draw(at: CGPoint(x: 0, y: 0), withAttributes: attributes)
}
return data
}
func sharePDF () {
let activityViewController = UIActivityViewController(
activityItems: [data],  applicationActivities: nil)
activityViewController.excludedActivityTypes = [UIActivity.ActivityType.saveToCameraRoll]
if let popoverPresentationController = activityViewController.popoverPresentationController {
popoverPresentationController.barButtonItem = self.sharePDFButton
}
self.present(activityViewController, animated: true, completion: {
})   
}

一切都很好,除了文件名是由系统生成的("PDF文档.pdf"(。

有没有办法拥有自定义文件名?

请在呈现活动视图控制器时尝试使用以下代码,我希望它有效。

let fileManager = FileManager.default
let documentoPath = getDirectoryPath().appendingPathComponent(url.lastPathComponent) as URL
print("documentoPath :(documentoPath)")
if  fileManager.fileExists(atPath: documentoPath.path) {
DispatchQueue.main.async {
let activityViewController: UIActivityViewController = UIActivityViewController(activityItems: [documentoPath], applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
self.downloadNavController?.present(activityViewController, animated: true, completion: { () in
UIBarButtonItem.appearance().tintColor = UIColor.systemBlue
UINavigationBar.appearance().barTintColor = UIColor.white
})
}
}

你可以在这里找到getDirectoryPath((:

func getDirectoryPath() -> URL {
var nestedFolderURL: URL?
do{
let rootFolderURL = try FileManager.default.url(
for: .documentDirectory,
in: .userDomainMask,
appropriateFor: nil,
create: false
)
nestedFolderURL = rootFolderURL

if !FileManager.default.fileExists(atPath: nestedFolderURL!.relativePath) {
try FileManager.default.createDirectory(
at: nestedFolderURL!,
withIntermediateDirectories: false,
attributes: nil
)
}
return nestedFolderURL!
} catch (let error) {
print(error)
}

return nestedFolderURL!
}

相关内容

最新更新