Je suis en train de mettre à jour une ancienne application, mais je ne suis pas en mesure de faire en sorte que drawInRect fonctionne dans un contexte PDF.drawInRect ne fonctionne pas avec le PDF
J'ai remplacé la fonction dépréciée CGContextShowTextAtPoint par CGContextShowTextAtPoint (voir le code ci-dessous) mais elle n'écrit aucun texte.
Où est-ce que je me trompe?
Ceci est mon code:
-(NSMutableData *) writeToPDF {
CGRect pageRect;
pageRect = CGRectMake(0.0f, 0.0f, 612, 850);
NSMutableData *pdfData = [[NSMutableData alloc] init];
CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData((CFMutableDataRef)pdfData);
CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &pageRect, NULL);
CGContextSetTextDrawingMode (pdfContext, kCGTextFill);
// Page 1
CGContextBeginPage(pdfContext, &pageRect);
CGContextSetRGBStrokeColor(pdfContext, 0, 0, 0, 1);
CGAffineTransform transf = CGAffineTransformMake(1, 0, 0, -1, 0, pageRect.size.height);
CGContextConcatCTM(pdfContext, transf);
// Line - OK
CGContextMoveToPoint(pdfContext,0,0);
CGContextAddLineToPoint(pdfContext,pageRect.size.width,pageRect.size.height);
CGContextDrawPath(pdfContext, kCGPathStroke);
CGContextSetTextDrawingMode (pdfContext, kCGTextFill);
CGAffineTransform myTextTransform = CGAffineTransformMake(1,0,0,-1,0,0);
CGContextSetTextMatrix(pdfContext, myTextTransform);
// Text - Old working code to replace because CGContextSelectFont and CGContextShowTextAtPoint are deprecated
CGContextSelectFont(pdfContext, "Helvetica", 20, kCGEncodingMacRoman);
CGContextShowTextAtPoint(pdfContext, 50, 50, [@"Hello" UTF8String], [@"Hello" length]);
// Text - Replacing code that doesn't work
NSDictionary *attrs = @{ NSForegroundColorAttributeName : [UIColor blackColor],
NSFontAttributeName : [UIFont systemFontOfSize:20]
};
[@"Hello2" drawInRect:CGRectMake(50, 100, 100, 100) withAttributes:attrs];
CGContextDrawPath(pdfContext, kCGPathStroke);
CGContextEndPage(pdfContext);
//
CGPDFContextClose(pdfContext);
CGContextRelease(pdfContext);
CGDataConsumerRelease(dataConsumer);
return pdfData;
}
Je ne peux pas tester immédiatement votre code - mais définissez-vous le contexte graphique actuel quelque part? drawInRect utilise le contexte graphique actuel et je ne vois pas que vous avez défini votre contexte PDF comme étant actuel. Regardez UIGraphicsPushContext pour définir votre contexte PDF comme actuel. –
Merci, c'est la solution. Tu as sauvé ma journée. Je me demandais comment le drawInRect aurait connu le contexte actuel, mais j'ai complètement raté UIGraphicsPushContext. – Fab
Je vais écrire une courte réponse afin que vous puissiez l'approuver et d'autres personnes peuvent voir la réponse plus tard aussi. –