嗨,我还是 mac 和 Objective-c 的新手。
我搜索了几个小时来回答我的问题,但我没有得到任何结果。
我想绘制一些简单的 2D 路径/对象并将其保存到svg
或pdf
文件中。
我的计划是创建一个CGPath
(我已经知道该怎么做),然后将其导出到我的磁盘上svg
或pdf
存档。
如果有人有某种代码片段或教程,我将非常感谢,其中对此进行了解释。
希望,NL。
嗨,我还是 mac 和 Objective-c 的新手。
我搜索了几个小时来回答我的问题,但我没有得到任何结果。
我想绘制一些简单的 2D 路径/对象并将其保存到svg
或pdf
文件中。
我的计划是创建一个CGPath
(我已经知道该怎么做),然后将其导出到我的磁盘上svg
或pdf
存档。
如果有人有某种代码片段或教程,我将非常感谢,其中对此进行了解释。
希望,NL。
您可以使用 Core Graphics 命令(如东西)创建CGPDFContext
并绘制到其中。CGPath
我用了user1118321的Tipp,在Core Graphics里搜索了一下。
可悲的是,它仍然花了我很多时间,不知何故我无法将现有路径添加到上下文中......不知何故我无法抚摸它。
就我而言,这没问题,因为我想画一个新的。Core Graphics 确实提供了与 CGContext 中的 CGPaths 绘图功能类似的功能。
这是我用来创建 pdf 文件并在其中绘制新路径的代码:
-(void) createPDFwithSize:(CGRect) size andFilename: (const char *) filename;
{
CGContextRef pdfContext;
CFStringRef path;
CFURLRef url;
CFDataRef boxData = NULL;
CFMutableDictionaryRef myDictionary = NULL;
CFMutableDictionaryRef pageDictionary = NULL;
path = CFStringCreateWithCString (NULL, filename, kCFStringEncodingUTF8);
url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, 0);
CFRelease (path);
myDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File"));
CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name"));
pdfContext = CGPDFContextCreateWithURL (url, &size, myDictionary);
CFRelease(myDictionary);
CFRelease(url);
pageDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
boxData = CFDataCreate(NULL,(const UInt8 *)&size, sizeof (CGRect));
CFDictionarySetValue(pageDictionary, kCGPDFContextMediaBox, boxData);
CGPDFContextBeginPage (pdfContext, pageDictionary);
// -----------------------------------------------------------------------------------------------------------------
// Draw stuff ...
CGContextSetLineWidth(pdfContext, 1);
CGContextSetStrokeColorWithColor(pdfContext, CGColorCreateGenericRGB(0, 0, 0, 1));
CGContextBeginPath(pdfContext);
CGContextMoveToPoint(pdfContext, 100, 100);
CGContextAddLineToPoint(pdfContext, 100, 150);
CGContextAddLineToPoint(pdfContext, 125, 175);
CGContextAddLineToPoint(pdfContext, 150, 150);
CGContextAddLineToPoint(pdfContext, 150, 100);
CGContextAddLineToPoint(pdfContext, 100, 150);
CGContextAddLineToPoint(pdfContext, 150, 150);
CGContextAddLineToPoint(pdfContext, 100, 100);
CGContextAddLineToPoint(pdfContext, 150, 100);
CGContextStrokePath(pdfContext); // don't forget this
CGContextClosePath(pdfContext);
// -----------------------------------------------------------------------------------------------------------------
CGPDFContextEndPage (pdfContext);
CGContextRelease (pdfContext);
CFRelease(pageDictionary);
CFRelease(boxData);
}