ios - 将图像转换为 pdf 但不保存在文件中
问题描述
您好,我正在将 pdf 从文件打开到 imageview,然后在图像视图上我正在删除 pin,之后我想再次保存为 pdf,但它没有保存在 iphone 上的文件中
我也尝试了以下解决方案
https://stackoverflow.com/a/45001576/10804348
这是我的代码
import UIKit
import PDFKit
class PreviewViewController: UIViewController {
@IBOutlet private weak var imageView: UIImageView!
var image: UIImage?
override func viewDidLoad() {
super.viewDidLoad()
let longP = UILongPressGestureRecognizer(target: self, action: #selector(longPressed(sender:)))
self.imageView.addGestureRecognizer(longP)
imageView.isUserInteractionEnabled = true
imageView.image = image
}
@objc func longPressed(sender: UILongPressGestureRecognizer) {
print("longpressed")
let touchPoint = sender.location(in: self.imageView)
let xPOint = touchPoint.x
let yPoint = touchPoint.y
let buble = UIImageView(frame: CGRect(x: xPOint, y: yPoint, width: 20, height: 20))
buble.image = UIImage(named: "Pin")
imageView.addSubview(buble)
}
func createPDF(image: UIImage) -> NSData? {
let pdfData = NSMutableData()
let pdfConsumer = CGDataConsumer(data: pdfData as CFMutableData)!
var mediaBox = CGRect.init(x: 0, y: 0, width: image.size.width, height: image.size.height)
let pdfContext = CGContext(consumer: pdfConsumer, mediaBox: &mediaBox, nil)!
pdfContext.beginPage(mediaBox: &mediaBox)
pdfContext.draw(image.cgImage!, in: mediaBox)
pdfContext.endPage()
return pdfData
}
@IBAction func btnSaveTapped(_ sender: UIButton) {
let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let docURL = documentDirectory.appendingPathComponent("myFileName.pdf")
createPDF(image: image!)?.write(to: docURL, atomically: true)
print("Saved")
}
}
但我仍然无法在设备文件中另存为 pdf,这里我附上屏幕截图,以便您可以轻松理解
所以请告诉我这是正确的方法或者我做错了什么请告诉我
解决方案
使用此代码将 pdf 文件成功保存在FileManager
.
@IBAction func btnSaveTapped(_ sender: UIButton) {
let fileManager = FileManager.default
do {
let documentDirectory = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
let docURL = documentDirectory.appendingPathComponent("myFileName.pdf")
let myImage = UIImage(named: "Screen1")
print(docURL)
createPDF(image: myImage!)?.write(to: docURL, atomically: true)
} catch {
print(error)
}
}
在文件管理器中查看已保存的文件
按照此步骤在路径中显示文件(使用模拟器运行时)
输出路径打印如
file:///Users/atulparmar/Library/Developer/CoreSimulator/Devices/D8012A46-71C3-4A99-8D81-31890208EF03/data/Containers/Data/Application/506B9D5A-9FB0-4865-8F14-D2DB27495B05/Documents/myFileName.pdf
打开 Finder -> Go -> Go to Folder.. 过去的路径如下(快捷键⇧⌘G)
~/Library/Developer/CoreSimulator/Devices/D8012A46-71C3-4A99-8D81-31890208EF03/data/Containers/Data/Application/506B9D5A-9FB0-4865-8F14-D2DB27495B05/Documents/myFileName.pdf
如果您使用真实设备运行,则可以使用代码进行检查,请参阅此帖子以检查设备中是否存在文件 如何检查 Swift 中的 Documents 目录中是否存在文件?
推荐阅读
- oracle-apex - 标记重复项目的最佳实践
- angular - 在新的 Angular 11 项目上测试缓慢并崩溃
- javascript - 如何在未聚焦时从父项中隐藏元素之前单击它
- javascript - 如何让谷歌表单自动填写
- java - 我想通过单击另一个音乐按钮来停止音乐,并从中开始播放新音乐
- python - DRF 不支持具有多部分/表单数据请求的嵌套序列化程序吗?
- gradle - 将自定义任务的执行限制为 bootBuildImage 的执行
- python - ansible/yaml : 从 dict 获取值作为字符串
- react-native - 将条带连接集成到市场的反应本机应用程序中
- python - 循环以从给定列表中选择特定数字