首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift CGPDFContextBeginPage和CFData

Swift CGPDFContextBeginPage和CFData
EN

Stack Overflow用户
提问于 2015-03-13 20:57:29
回答 1查看 1.2K关注 0票数 2

我想在Swift中创建一些PDF页面。

这是我创建PDF页面的代码

代码语言:javascript
复制
// 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代码:

代码语言:javascript
复制
CGRect mediaBox = CGRectZero;
CFDataCreate(kCFAllocatorDefault, (const UInt8 *)&mediaBox, sizeof(mediaBox));

斯威夫特变体应该是什么?

假设我以某种方式创建了一个CFData对象,下一个“硬”步骤是将其添加到CFDictionary中。以下是我尝试过的方法:

代码语言:javascript
复制
let pageDictionary = CFDictionaryCreateMutable(nil, 0, nil, nil);
CFDictionarySetValue(pageDictionary, key: &kCGPDFContextMediaBox, value: data);

对于这两行,我收到以下错误:CFString is not convertible to '@lvalue inout $T3'

你有什么线索吗?我怎样才能纠正这两个错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-13 21:15:20

CFDataNSData“搭桥”,CFDictionaryNSDictionary搭桥。因此,以下几点应能奏效:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29041803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档