当前位置: 首页 > 知识库问答 >
问题:

有没有人有很好的方法把PKDrawing清晰地渲染成PDF?

全鸿晖
2023-03-14

我正在尝试分享我的PKDrawing结果通过PDF文件电子邮件或打印。 我正在创建PDF使用2个其他PDF文件加上顶层的PK绘图。 这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()

共有1个答案

鲁靖
2023-03-14

把我的等级从2.0改成4.0,这让我觉得很清楚,我从来没想过要这么做。 将用我的更改和注释编辑代码。 当然,如果有一个更干净,更清晰的方法来做这件事的话,也可以选择其他的选择。 我不是最擅长分辨率/像素空间的。

 类似资料:
  • 我喜欢Java中的。在一个简单的类中,它允许我清楚地识别返回类型和参数,这些类型和参数可能可用,也可能不可用。 我要解决的一件事是,必须将其分配给一个短期变量,然后将其继承到后续的每个范围中。 当使用这样的选项时,我喜欢使用简单的变量名称: 但当我需要在这个范围内使用变量名时。。。 我可以使用诸如和之类的东西。但是我想知道是否有另一种方法可以编写这段代码,而不必枚举我的临时变量。这有点像懒惰的变量

  • 我想知道我是否可以使用MathJax渲染LaTeX符号,而不封装LaTeX符号周围的\(......\)。例如,对于\frac{2}{3}而不是\(\frac{2}{3}\),如果是,我如何设置它? 非常感谢!

  • 问题内容: 我正在寻找良好的PHP地理位置服务,因此当我启动我的应用程序时,我可能会遇到类似以下情况: 以纬度和经度值检索用户的位置。 问题答案: 地理定位将需要在浏览器中完成,因为服务器(即PHP)将永远无法找到大部分相关数据。在浏览器中进行地理定位的主要API是Google的API,但是作为开发人员,您无需使用该API。您将使用标准化的浏览器API(尽管目前仅少数浏览器支持)。 对于在服务器端

  • 问题内容: 是否有很好的方法来支持Redis Sorted Set中的pop成员,就像List的api LPOP一样? 我从Redis Sorted Set弹出消息中发现的是使用ZRANGE + ZREM,但是它不是线程安全性,并且当多线程同时从不同主机访问它们时需要分布式锁。 请提出建议,是否有更好的方法可以从排序集中弹出成员? 问题答案: 您可以编写一个Lua脚本来完成这项工作:将这两个命令包

  • 问题内容: 有没有很好的方法来获取下一个星期三的日期?也就是说,如果今天是星期二,我想获取本周星期三的日期;如果今天是星期三,我想知道下星期三的日期;如果今天是星期四,我想获取下周的星期三日期。 谢谢。 问题答案: 基本算法如下: 获取当前日期 取得星期几 与周三找到不同 如果差异不是正数,则加7(即坚持下一个到来/将来的日期) 增加差异 这是一个片段,展示了如何使用: 相对于我现在的位置,上述代

  • 我想这样做(显然不工作)< br >我可以将结果存储在一个状态中,并在< code>render()方法中呈现组件,但问题是我进行了许多调用,并将有许多res对象。我最终会有许多状态要维护,所以我想在< code>axios调用后只返回一个组件,而不是每次都改变许多状态。这可能吗?< br >

  • e(fx)clipse插件为Eclipse提供了一个generate命令,该命令将生成如上所述的JavaFX getter/setter。IntelliJ IDEA有类似的功能吗?