Je voudrais créer des pages PDF dans Swift.Swift CGPDFContextBeginPage et CFData
Ceci est mon code pour créer une page PDF
// Initialize context and other stuff
CGPDFContextBeginPage(pdfContext, aDictionary);
CGContextDrawPDFPage(pdfContext, pdfPageRef)
CGPDFContextEndPage(pdfContext)
J'ai un problème avec la variable "aDictionary". Je voudrais ajouter la valeur media box (qui est la variable de type CGRect) sous la clé kCGPDFContextMediaBox. La documentation me dit ce qui suit: 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).
Dans l'objectif-c, il est assez facile de créer un CFData à partir de CGRect, mais dans Swift je ne sais pas comment le créer. Voici mon objectif-c code:
CGRect mediaBox = CGRectZero;
CFDataCreate(kCFAllocatorDefault, (const UInt8 *)&mediaBox, sizeof(mediaBox));
Quelle devrait être la variante Swift?
Supposons que j'ai créé un objet CFData, l'étape "difficile" suivante consiste à l'ajouter à un CFDictionary. Voici comment j'ai essayé:
let pageDictionary = CFDictionaryCreateMutable(nil, 0, nil, nil);
CFDictionarySetValue(pageDictionary, key: &kCGPDFContextMediaBox, value: data);
Pour ces deux lignes, je reçois l'erreur suivante: CFString is not convertible to '@lvalue inout $T3'
Avez-vous des indices comment puis-je corriger ces deux erreurs?
de Nice! Le 'sizeofValue' a sauvé ma journée. J'ai essayé avec juste sizeof et cela ne fonctionnait pas. –
@InfinitePossibilities: Oui, contrairement à C, Swift fait une distinction entre 'sizeof (someType)' et 'sizeofValue (someValue)'. –
Merci @ Martin R, je dois lire les docs à ce sujet. –