将图像转换为 pdf 但不保存在文件中
Posted
技术标签:
【中文标题】将图像转换为 pdf 但不保存在文件中【英文标题】:converting Image to pdf but not save in files 【发布时间】:2019-02-22 06:49:21 【问题描述】:您好,我正在将 pdf 从文件打开到 imageview,然后在图像视图上我正在删除 pin,之后我想再次保存为 pdf,但它没有保存在 iphone 上的文件中
我也尝试了以下解决方案
https://***.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,这里我附上屏幕截图以便您可以轻松理解
所以请告诉我这是正确的方法,或者我做错了什么请告诉我
【问题讨论】:
尝试从UIImageView
创建pdf - ***.com/a/54730509/2955078
@Akhilrajtr 是的,但是我如何合并两个图像一个 pdf 和第二个是 pin 然后我想保存
由于您是从UIImageView
创建的,因此它还将在 pdf 中包含子视图。尝试上述解决方案一次并分享结果
好的,我会告诉你工作与否
【参考方案1】:
使用此代码将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/我的文件名.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
如果你是在真机上运行,那么你可以用代码检查,查看这篇文章来检查设备中是否存在文件How to check if a file exists in the Documents directory in Swift?
【讨论】:
file:///var/mobile/Containers/Data/Application/63195BAC-BEA9-41AF-9260-CABCB30D6BE4/Documents/myFileName.pdf
我得到了这条路
但无法理解我从哪里得到所有这些路径文件夹
我签入了文件,但没有任何文件名
不能检查手机路径,在模拟器中运行应用程序,然后转到指定路径。
好的,但我在真实设备上运行并检查设备上的文件但不保存在真实设备上【参考方案2】:
要在点击保存按钮时获取 imageView 的上下文,您可以更新您的 create pdf 函数,以便在点击按钮时将 imageview 图层渲染为 pdf 上下文。生成的 pdf 包含图像以及您添加的图钉:
func createPDF() -> NSData?
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, imageView.bounds, nil)
UIGraphicsBeginPDFPage()
let pdfContext = UIGraphicsGetCurrentContext()
imageView.layer.render(in: pdfContext!)
UIGraphicsEndPDFContext()
return pdfData
【讨论】:
以上是关于将图像转换为 pdf 但不保存在文件中的主要内容,如果未能解决你的问题,请参考以下文章