如何在svg或pdf中保存CGPath?

时间:2013-11-07 13:49:52

标签: objective-c macos cocoa svg cgpath

嗨,我仍然是mac和objective-c的新手。

我搜索了几个小时来回答我的问题,但我没有到达任何地方。

我想绘制一些简单的2D路径/对象并将其保存到svgpdf文件。

我的计划是创建CGPath(我已经知道该怎么做),然后将其导出到我的磁盘上的svgpdf文件。

如果有人提供某种代码片段或教程,我会非常感激。解释这一点。

希望,NL。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

我使用了用户1118321的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);
}