在我正在构建的应用程序中,我必须生成一个 pdf 文件,然后通过电子邮件、WhatsApp 等共享。
目前我已经按照以下代码生成pdf。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var masterContainerView: UIView!
@IBOutlet weak var pdfButton: UIButton!
@IBAction func generatePDFtapped(_ sender: Any) {
pdfButton.isHidden = true
generatePDF()
pdfButton.isHidden = false
}
func generatePDF() {
let pdfWrittenPath = masterContainerView.exportAsPdfFromView()
print("PDF written at \(pdfWrittenPath)")
}
}
上面的代码是 View Controller ,类文件是这样的:
import Foundation
import UIKit
//to call this, use the <viewoutletname>.exportAsPdfFromView()
extension UIView {
// Export pdf from Save pdf in directory and return pdf file path
func exportAsPdfFromView() -> String {
let pdfPageFrame = self.bounds
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, pdfPageFrame, nil)
UIGraphicsBeginPDFPageWithInfo(pdfPageFrame, nil)
guard let pdfContext = UIGraphicsGetCurrentContext() else { return "" }
self.layer.render(in: pdfContext)
UIGraphicsEndPDFContext()
return self.saveViewPdf(data: pdfData)
}
// Save pdf file in document directory
func saveViewPdf(data: NSMutableData) -> String {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let docDirectoryPath = paths[0]
let pdfPath = docDirectoryPath.appendingPathComponent("viewPdf.pdf")
if data.write(to: pdfPath, atomically: true) {
return pdfPath.path
print("PDF written at path \(pdfPath.path)")
} else {
return ""
}
}
}
我在互联网上找到了一个有用的示例,它准确地解释了我必须做什么。但我的问题是,EXAMPLE
开发人员正在访问公共(public) URL
,而不是加载保存的 PDF 文件(已存储)。请帮我修改一下代码。
expected output image 这是预期的输出,但不应获取图像文件,而应获取 pdf
最佳答案
那么您只想加载之前保存的文件?
执行相同的操作来访问文件名和路径,然后读取内容。
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let docDirectoryPath = paths.first
let pdfPath = docDirectoryPath.appendingPathComponent("viewPdf.pdf")
let data = Data(contentsOf: pdfPath)
完整示例:
class ViewController: UIViewController {
let dataString = "Helloooooo world"
override func viewDidLoad() {
super.viewDidLoad()
saveFile()
readFile()
}
func saveFile() {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let docDirectoryPath = paths.first
let pdfPath = docDirectoryPath?.appendingPathComponent("test.txt")
let data = dataString.data(using: .utf8)
try? data?.write(to: pdfPath!)
}
func readFile() {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let docDirectoryPath = paths.first
let pdfPath = docDirectoryPath?.appendingPathComponent("test.txt")
let data = try? Data(contentsOf: pdfPath!)
let str = String(bytes: data!, encoding: .utf8)
print("[DEBUG] result is \(str)")
}
}
输出:
[DEBUG] result is Optional("Helloooooo world")
关于ios - 如何使用 swift 下载和共享 pdf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56034091/