如何禁用编辑 PDF 注释?
How do I disable to edit PDFAnnotations?
我正在 Swift 4.2 中构建 iOS 应用程序,可以对 PDF 文件进行签名。
但如果将签名嵌入为 PDFAnnotation,它可以在苹果的预览应用程序或其他可以编辑 pdf 的应用程序中进行编辑。
如何禁用编辑 PDFAnnoations ??
"Signature" 由 UIImage 转换手写 beizerpaths 创建。
class SignatureAnnotation: PDFAnnotation {
var image: UIImage!
init(with image: UIImage!, forBounds bounds: CGRect, withProperties properties: [AnyHashable : Any]?) {
super.init(bounds: bounds,
forType: PDFAnnotationSubtype.freeText,
withProperties: properties)
self.image = image
}
required init?(coder aDecoder: NSCoder) {
fatalError()
}
override func draw(with box: PDFDisplayBox, in context: CGContext) {
guard let cgImage = self.image.cgImage else { return }
context.draw(cgImage, in: self.bounds)
}
}
func embedSignatureToPDF() {
let page = pdfView.currentPage
let signatureAnnotation = SignatureAnnotation(with: signature, forBounds: signatureRect, withProperties: nil)
page.addAnnotation(signatureAnnotation)
}
我终于找到解决办法了!
这里的思路是不使用PDFAnnotation!
签名是一张图片
所以当用户保存 PDF
您将使用签名图片
创建新的 PDF
并将其保存到同一个 PDF 文件
把你的签名放在你想要的地方
你需要修改 X 和 Y
image.draw(in: CGRect(x: 100, y: 100, width: 100, height: 100))
下面的代码将获取PDF的路径
通常,它保存在文档文件夹中
你只需要发送文件的路径
还有签名图片
该函数会将图像添加到 PDF 上方并保存
func drawOnPDF(path: String , signatureImage:UIImage) {
// Get existing Pdf reference
let pdf = CGPDFDocument(NSURL(fileURLWithPath: path))
// Get page count of pdf, so we can loop through pages and draw them accordingly
let pageCount = pdf?.numberOfPages
// Write to file
UIGraphicsBeginPDFContextToFile(path, CGRect.zero, nil)
// Write to data
//var data = NSMutableData()
//UIGraphicsBeginPDFContextToData(data, CGRectZero, nil)
for index in 1...pageCount! {
let page = pdf?.page(at: index)
let pageFrame = page?.getBoxRect(.mediaBox)
UIGraphicsBeginPDFPageWithInfo(pageFrame!, nil)
let ctx = UIGraphicsGetCurrentContext()
// Draw existing page
ctx!.saveGState()
ctx!.scaleBy(x: 1, y: -1)
ctx!.translateBy(x: 0, y: -pageFrame!.size.height)
//CGContextTranslateCTM(ctx, 0, -pageFrame.size.height);
ctx!.drawPDFPage(page!)
ctx!.restoreGState()
// Draw image on top of page
let image = signatureImage
image.draw(in: CGRect(x: 100, y: 100, width: 100, height: 100))
// Draw red box on top of page
//UIColor.redColor().set()
//UIRectFill(CGRectMake(20, 20, 100, 100));
}
UIGraphicsEndPDFContext()
}
把注解类型改成按钮怎么样?每次点击签名都会叠加,但是不能编辑
init(with image: UIImage!, forBounds bounds: CGRect, withProperties properties: [AnyHashable : Any]?) {
super.init(bounds: bounds, forType: PDFAnnotationSubtype.widget, withProperties: properties)
self.image = image
self.isReadOnly = true
self.widgetFieldType = .button
}
我正在 Swift 4.2 中构建 iOS 应用程序,可以对 PDF 文件进行签名。 但如果将签名嵌入为 PDFAnnotation,它可以在苹果的预览应用程序或其他可以编辑 pdf 的应用程序中进行编辑。 如何禁用编辑 PDFAnnoations ??
"Signature" 由 UIImage 转换手写 beizerpaths 创建。
class SignatureAnnotation: PDFAnnotation {
var image: UIImage!
init(with image: UIImage!, forBounds bounds: CGRect, withProperties properties: [AnyHashable : Any]?) {
super.init(bounds: bounds,
forType: PDFAnnotationSubtype.freeText,
withProperties: properties)
self.image = image
}
required init?(coder aDecoder: NSCoder) {
fatalError()
}
override func draw(with box: PDFDisplayBox, in context: CGContext) {
guard let cgImage = self.image.cgImage else { return }
context.draw(cgImage, in: self.bounds)
}
}
func embedSignatureToPDF() {
let page = pdfView.currentPage
let signatureAnnotation = SignatureAnnotation(with: signature, forBounds: signatureRect, withProperties: nil)
page.addAnnotation(signatureAnnotation)
}
我终于找到解决办法了!
这里的思路是不使用PDFAnnotation!
签名是一张图片 所以当用户保存 PDF
您将使用签名图片 创建新的 PDF 并将其保存到同一个 PDF 文件
把你的签名放在你想要的地方
你需要修改 X 和 Y
image.draw(in: CGRect(x: 100, y: 100, width: 100, height: 100))
下面的代码将获取PDF的路径 通常,它保存在文档文件夹中 你只需要发送文件的路径 还有签名图片 该函数会将图像添加到 PDF 上方并保存
func drawOnPDF(path: String , signatureImage:UIImage) {
// Get existing Pdf reference
let pdf = CGPDFDocument(NSURL(fileURLWithPath: path))
// Get page count of pdf, so we can loop through pages and draw them accordingly
let pageCount = pdf?.numberOfPages
// Write to file
UIGraphicsBeginPDFContextToFile(path, CGRect.zero, nil)
// Write to data
//var data = NSMutableData()
//UIGraphicsBeginPDFContextToData(data, CGRectZero, nil)
for index in 1...pageCount! {
let page = pdf?.page(at: index)
let pageFrame = page?.getBoxRect(.mediaBox)
UIGraphicsBeginPDFPageWithInfo(pageFrame!, nil)
let ctx = UIGraphicsGetCurrentContext()
// Draw existing page
ctx!.saveGState()
ctx!.scaleBy(x: 1, y: -1)
ctx!.translateBy(x: 0, y: -pageFrame!.size.height)
//CGContextTranslateCTM(ctx, 0, -pageFrame.size.height);
ctx!.drawPDFPage(page!)
ctx!.restoreGState()
// Draw image on top of page
let image = signatureImage
image.draw(in: CGRect(x: 100, y: 100, width: 100, height: 100))
// Draw red box on top of page
//UIColor.redColor().set()
//UIRectFill(CGRectMake(20, 20, 100, 100));
}
UIGraphicsEndPDFContext()
}
把注解类型改成按钮怎么样?每次点击签名都会叠加,但是不能编辑
init(with image: UIImage!, forBounds bounds: CGRect, withProperties properties: [AnyHashable : Any]?) {
super.init(bounds: bounds, forType: PDFAnnotationSubtype.widget, withProperties: properties)
self.image = image
self.isReadOnly = true
self.widgetFieldType = .button
}