我想在Swift中创建一些PDF页面。
这是我创建PDF页面的代码
// Initialize context and other stuff
CGPDFContextBeginPage(pdfContext, aDictionary);
CGContextDrawPDFPage(pdfContext, pdfPageRef)
CGPDFContextEndPage(pdfContext)我对"aDictionary“变量有一个问题。我想在CGRect键下添加媒体框(它是kCGPDFContextMediaBox类型变量)值。文档告诉我如下:The media box for the document or for a given page. This key is optional. If present, the value of this key must be a CFData object that contains a CGRect (stored by value, not by reference).
在objective中,从CFData创建CGRect相当容易,但在Swift中,我不知道如何创建它。这是我的目标-c代码:
CGRect mediaBox = CGRectZero;
CFDataCreate(kCFAllocatorDefault, (const UInt8 *)&mediaBox, sizeof(mediaBox));斯威夫特变体应该是什么?
假设我以某种方式创建了一个CFData对象,下一个“硬”步骤是将其添加到CFDictionary中。以下是我尝试过的方法:
let pageDictionary = CFDictionaryCreateMutable(nil, 0, nil, nil);
CFDictionarySetValue(pageDictionary, key: &kCGPDFContextMediaBox, value: data);对于这两行,我收到以下错误:CFString is not convertible to '@lvalue inout $T3'
你有什么线索吗?我怎样才能纠正这两个错误?
发布于 2015-03-13 21:15:20
CFData与NSData“搭桥”,CFDictionary与NSDictionary搭桥。因此,以下几点应能奏效:
var mediaBox = CGRect(x: 0.0, y: 0.0, width: 612, height: 792)
let boxData = NSData(bytes: &mediaBox, length: sizeofValue(mediaBox))
let pageInfo = [ kCGPDFContextMediaBox as String : boxData ]
CGPDFContextBeginPage(context, pageInfo)更新Swift 3:
var mediaBox = CGRect(x: 0.0, y: 0.0, width: 612, height: 792)
let boxData = NSData(bytes: &mediaBox, length: MemoryLayout.size(ofValue: mediaBox))
let pageInfo = [ kCGPDFContextMediaBox as String : boxData ]
context.beginPDFPage(pageInfo as NSDictionary)https://stackoverflow.com/questions/29041803
复制相似问题