NSView到PDF和PNG:为什么结果如此不同?

时间:2018-03-26 15:08:27

标签: swift macos cocoa draw nsview

我正在努力保护max到PNG。 我从NSView开始,然后为PNG致电NSViewdataWithPDF。做这两件事的代码看起来像这样。

cacheDisplay

到目前为止,这么好。然而,这是不同的结果。 PDF(正确!) correct PDF output 这是PNG输出。可以看出,子视图不包括在内。箭头是guard view.lockFocusIfCanDraw() else { assert (false) return } let pdfData = view.dataWithPDF(inside: rect) guard let imgData = view.bitmapImageRepForCachingDisplay(in: rect) else { assert(false) } view.cacheDisplay(in: rect, to: imgData) view.unlockFocus() try pdfData.write(to: pdfName, options: .atomic) let pngData = imgData.representation(using: .png, properties: [:]) try pngData!.write(to: pngName, options: .atomic) 的一部分绘制的 enter image description here

为什么结果如此不同?

非常感谢提前!

2 个答案:

答案 0 :(得分:1)

好的,我找到了答案。感谢“查看调试”,我发现子视图使用了一个图层(self.wantsLayer = true)。并且图层不会进入PNG,而是进入PDF。不确定这是一个错误还是一个功能。但是,现在我可以修复PNG输出。

答案 1 :(得分:0)

  

为什么结果如此不同?

使用不同的(我显然没有您的视图)使用子视图查看代码按预期工作并且PNG很好。所以它必须与你的观点有关,但我不能暗示什么。然而...

由于您拥有有效的PDF数据,您可以使用以下内容生成PNG:

let captured = NSImage(data:pdfData)
let rep = NSBitmapImageRep(data:(captured?.tiffRepresentation)!)
let pngData = rep?.representation(using: NSPNGFileType, properties:[:])

(即Swift 3,因此NSPNGFileType而不是.png

这当然没有解决你遇到的任何问题,它避免了它:-)你应该弄清楚为什么你的观点失败并将其视为临时乐队援助(假设它适合你......)。

HTH

相关问题