我遵循了这个article
使用PDFAnnotation对PDF签名
您可以使用文章here中的项目下载项目
我的问题是,如果我将pdf下载到计算机上,然后使用Preview或任何PDFviewer应用程序将其打开,则为PDFAnnotation
我可以在页面上移动PDFAnnotation!
并且因为我的应用是“客户到客户”
因此客户端1对PDF签名,然后将其发送给客户端2
以及Client 2签名PDF
那就是为什么我需要渲染新的pdf,这意味着PDFAnnotation进入了PDF而不是PDFAnnotation
另外,您可以下载此PDF
您会注意到我的问题以及如何将这两个PDFAnnotations移动
最佳答案
我终于找到了解决方案!
感谢tempire
和他的code
我确实将其转换为Swift 4.2
这里的想法不是使用PDFAnnotation!。
签名是图像
因此,当用户保存PDF时
我将使用签名图片
创建新的PDF
并保存到相同的PDF文件
把你的签名放在你想要的地方
您需要修改X和Yimage.draw(in: CGRect(x: 100, y: 100, width: 100, height: 100))
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()
}