-2

我正在尝试通过 PDF 文件共享我的 PKDrawing 结果以供电子邮件或打印。我正在使用其他 2 个 PDF 文件以及顶层的 PKDrawing 创建 PDF。2 个 PDF 图层看起来很清晰。然而,PKDrawing 有点颗粒感,尤其是与打印的屏幕截图相比。

这是我当前的代码:

UIGraphicsBeginPDFContextToFile(filePath, CGRect.zero, nil)
    
var drawing: PKDrawing = PKDrawing.init()
let markup: Data = self.pages![pagenum].value(forKey: "markup") as! Data
let drawingHeight = self.pages![pagenum].value(forKey: "height") as! CGFloat
let drawingWidth = self.pages![pagenum].value(forKey: "width") as! CGFloat
            
do {
    try drawing = PKDrawing.init(data: markup)
} catch {
    print("Error loading drawing") 
}

let pageSize = CGSize(width: 0, height: 0)
//let scale: CGFloat = 2.0    THIS VALUE DOESN'T SEEM TO MATTER 
let scale: CGFloat = 1.0 

if landscapeOrientation {
    pageSize = CGSize(width:2048, height: 1408)
} else {
    pageSize = CGSize(width: 1536, height: 1920)
}
                
let canvas = PKCanvasView(frame: CGRect(x: 0.0, y: 0.0, width: drawingWidth, height: drawingHeight))
canvas.drawing = drawing
markupImage = drawing.image(from: canvas.frame, scale: scale)
if pageSize.width != drawingWidth {
   canvas.drawing.transform(using: CGAffineTransform(scaleX: pageSize.width / drawingWidth, y: pageSize.height / drawingHeight))
}
//markupImage = drawing.image(from: canvas.frame, scale: self.view.contentScaleFactor)  THIS CHANGE MADE A BIG DIFFERENCE 
markupImage = drawing.image(from: canvas.frame, scale: 4.0) 
                
UIGraphicsBeginImageContext(pageSize)
backgroundView?.draw(in: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: pageSize))
templateView?.draw(in: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: pageSize))
            
markupImage.draw(in: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: pageSize))
          
let pdfImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
        
let pageRect: CGRect = CGRect(origin: CGPoint.zero, size: pageSize)
UIGraphicsBeginPDFPageWithInfo(pageRect, nil)
let pdfContext: CGContext = UIGraphicsGetCurrentContext()!
pdfContext.scaleBy(x: 1.0, y: 1.0)
pdfImage.draw(at: CGPoint(x: 0.0, y: 0.0))
        
UIGraphicsEndPDFContext()
4

1 回答 1

0

将我的比例从 2.0 更改为 4.0 会清除很多,我没想过要尝试。将使用我的更改和评论来编辑代码。如果有更清洁或更清晰的方法来执行此操作,则绝对可以使用其他替代方法。我在分辨率/像素空间方面不是最好的。

于 2020-07-25T14:50:57.337 回答