无法使用 Cocoa/Swift/Quartz 绘制到新的 PDF 中
Unable to draw into a new PDF with Cocoa/Swift/Quartz
我正在尝试使用 Swift 创建一个简单的命令行应用程序,它将创建一个新的 PDF,在其中绘图,并将 PDF 保存到磁盘。以下是我的代码的基本版本:
// main.swift
import Cocoa
let fileName = "test.pdf"
func getPath() -> NSURL? {
let fileManager = NSFileManager.defaultManager()
do {
let dir = try fileManager.URLForDirectory(
NSSearchPathDirectory.DocumentDirectory,
inDomain: NSSearchPathDomainMask.UserDomainMask,
appropriateForURL: nil,
create: false
)
return dir.URLByAppendingPathComponent(fileName)
} catch {
return nil
}
}
let context = CGPDFContextCreateWithURL(getPath(), nil, nil)
CGPDFContextBeginPage(context, nil)
let path = NSBezierPath(rect: NSRect(x: 0, y: 0, width: 100, height: 100))
NSColor.greenColor().set()
path.fill()
CGPDFContextEndPage(context)
CGPDFContextClose(context)
当 运行 此代码按预期在我的 ~/Documents
目录中创建一个新的 test.pdf
文件时,它只是一个空白的 8.5x11 页面。任何绘图代码都因以下错误而失败:<Error>: CGContextSetFillColorWithColor: invalid context 0x0.
我能找到的用于创建和绘制成 PDF 的代码示例都很旧。他们当然不是 Swift 而且他们也倾向于使用 Quartz C API,所以我现在感觉有点迷茫。
感谢阅读。
你在这里混合了两个世界。 CoreGraphics 和 high-level Cocoa 绘图调用。要使 Cocoa 绘图工作,您需要创建一个基于 CoreGraphics 的 NSGraphicsContext 并使其成为当前上下文:
let graphicsContext = NSGraphicsContext(CGContext: context!, flipped:true)
NSGraphicsContext.saveGraphicsState()
NSGraphicsContext.setCurrentContext(graphicsContext)
我正在尝试使用 Swift 创建一个简单的命令行应用程序,它将创建一个新的 PDF,在其中绘图,并将 PDF 保存到磁盘。以下是我的代码的基本版本:
// main.swift
import Cocoa
let fileName = "test.pdf"
func getPath() -> NSURL? {
let fileManager = NSFileManager.defaultManager()
do {
let dir = try fileManager.URLForDirectory(
NSSearchPathDirectory.DocumentDirectory,
inDomain: NSSearchPathDomainMask.UserDomainMask,
appropriateForURL: nil,
create: false
)
return dir.URLByAppendingPathComponent(fileName)
} catch {
return nil
}
}
let context = CGPDFContextCreateWithURL(getPath(), nil, nil)
CGPDFContextBeginPage(context, nil)
let path = NSBezierPath(rect: NSRect(x: 0, y: 0, width: 100, height: 100))
NSColor.greenColor().set()
path.fill()
CGPDFContextEndPage(context)
CGPDFContextClose(context)
当 运行 此代码按预期在我的 ~/Documents
目录中创建一个新的 test.pdf
文件时,它只是一个空白的 8.5x11 页面。任何绘图代码都因以下错误而失败:<Error>: CGContextSetFillColorWithColor: invalid context 0x0.
我能找到的用于创建和绘制成 PDF 的代码示例都很旧。他们当然不是 Swift 而且他们也倾向于使用 Quartz C API,所以我现在感觉有点迷茫。
感谢阅读。
你在这里混合了两个世界。 CoreGraphics 和 high-level Cocoa 绘图调用。要使 Cocoa 绘图工作,您需要创建一个基于 CoreGraphics 的 NSGraphicsContext 并使其成为当前上下文:
let graphicsContext = NSGraphicsContext(CGContext: context!, flipped:true)
NSGraphicsContext.saveGraphicsState()
NSGraphicsContext.setCurrentContext(graphicsContext)