在编辑PDF和在UIWebView中显示图像时不合适的比例因子

我努力的PDF编辑,所以我开始尝试实现以下的朴素代码:

  • 显示与应用捆绑在一起的PDF
  • 点击我想添加图片的屏幕(例如签名)
  • 用编辑的PDF重新加载web视图

这是我在github上的代码: https : //github.com/HRiffiod/PDFSignature.git

问题是我的图像没有显示在编辑的PDF中的正确位置。 这不是随机的,但我从(0,0)坐标得到的距离越远,偏差就越大,这就是为什么我要赌一个错误的比例因子。

例如,如果我点击第一个单词,然后单击“Sign!”,就会得到这个结果。 :

在这里输入图像说明

所以这是相当准确的。 然而,如果我点击这个PDF页面的最后一个词(我的意思是页面,而不是这一段),会发生什么情况:

在这里输入图像说明

那根本就不行。

任何build议? 先谢谢你

编辑

下面是一段代码(你可以在github上find)上下文渲染的地方,可能是我做错了的地方:

// loop over PDF pages to render it for(size_t page = 1; page <= numberOfPages; page++) { // Get the current page and page frame CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdf, page); const CGRect pageFrame = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox); UIGraphicsBeginPDFPageWithInfo(pageFrame, nil); // Draw the page (flipped) CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextSaveGState(ctx); // Get appropriate scale //CGFloat scale = [[UIScreen mainScreen] scale]; // As suggested in SO, the (1, -1) scale might need to be changed but couldn't get it right. Y axis is negative in order to render PDF (mandatory) CGContextScaleCTM(ctx, 1, -1); CGContextTranslateCTM(ctx, 0, -pageFrame.size.height); CGContextDrawPDFPage(ctx, pdfPage); CGContextRestoreGState(ctx); if(page == 1) { [self drawLogo]; } } UIGraphicsEndPDFContext(); 

它看起来像你没有使用适当的规模的视网膜设备。

ViewController.m

 CGContextScaleCTM(ctx, 1, -1); 

这应该基于设备的规模。

例如(假设y尺度值由于某种原因需要是负的)

 CGFloat scale = [[UIScreen mainScreen] scale]; CGContextScaleCTM(ctx, scale, -scale);