Je affiche une page PDF sur le CGContext à l'aide du code
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context { CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0); CGContextFillRect(ctx, layer.bounds); CGContextTranslateCTM(ctx, 0.0, layer.bounds.size.height); CGContextScaleCTM(ctx, 1.0, -1.0); CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(myPageRef, kCGPDFBleedBox, layer.bounds, 0, true)); CGContextDrawPDFPage(ctx, myPageRef); }
5 Réponses :
La lecture cassée de votre code suggère l'utilisation de kcgpdfbleedbox code> doit être remplacée par un autre paramètre, peut-être
kcgpdfmeiabox code>. Voir ici pour plus d'informations. p>
Fbrereto, j'ai essayé KCGPDFMediaBox et toutes les autres options disponibles. Mais il n'y a pas de changement dans l'affichage.
Le cgpdfpagegetDrawingTransform code> ne retournera pas simplement la transformation de l'échelle si le rectangle de page PDF est inférieur au paramètre
rect code>. p>
TIA, j'ai essayé la même page dans d'autres applications de lecteur PDF et s'affiche correctement à l'écran. Il y a donc une autre façon pour la dessiner pour le faire en forme d'aspect.
développer la réponse de TIA; La méthode intégrée CGPDFPAGEGETDrawingTransform renforcera mais pas augmenter. Si vous souhaitez augmenter, vous devez déterminer votre propre transformée en comparant les résultats de CGPDFgetboxRect sur votre zone de contenu. Taper extemporanativement:
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context { Â Â Â CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0); Â Â Â CGContextFillRect(ctx, layer.bounds); Â Â Â CGContextTranslateCTM(ctx, 0.0, layer.bounds.size.height); Â Â Â CGContextScaleCTM(ctx, 1.0, -1.0); Â Â Â CGRect cropBox = CGPDFGetBoxRect(myPageRef, kCGPDFCropBox); Â Â Â CGRect targetRect = layer.bounds; Â Â Â CGFloat xScale = targetRect.size.width / cropBox.size.width; Â Â Â CGFloat yScale = targetRect.size.height / cropBox.size.height; Â Â Â CGFloat scaleToApply = xScale < yScale ? xScale : yScale; Â Â Â CGContextConcatCTM(ctx, CGAffineTransformMakeScale(scaleToApply, scaleToApply));Â Â Â Â CGContextDrawPDFPage(ctx, myPageRef); }
Pouvez-vous répondre à cette question que j'essaie aussi de la même manière que je ne peux pas obtenir exactement la forme Stackoverflow.com/Questtions/3908624/...
C'est un lien vers cette question; Vous vouliez probablement dire Stackoverflow .com / questions / 4321681 / ... ? Je vais jeter un coup d'œil dès que je suis une opportunité, bien que je sois malheureusement sur le chemin du chemin ...
Mise à jour mineure, cgpdfgetboxrect semble être maintenant cgpdfpagegetboxrect mais incroyablement utile! Ce dimensionnement m'a conduit fou. Vous pouvez également trouver, y compris la ligne CGContexConCAcTCTM (CTX, CGPDFPAGEGETDrawingTransform (myPageref, kcgpdfcropbox, couche.bounds, 0, true)); Avant que le CGContextDrawpdfpage aide les fichiers PDF qui sont tournés à 90 d'immeubles
Les autres réponses sont correctes que CGPDFPAGEGETDrawingTransform ne sera pas progressive, mais vous pouvez réduire le rectangle vers le bas pour capturer juste la case choisie. Utilisez CGPDFPAGEGETBOXRect () et calculez la balance comme Tommy suggérée dans la réponse acceptée, puis utilisez-la pour réduire le rectangle de capture transmis dans CGPDFPageGetDrawingTransform (). puis il est facilement étendu pour gérer également le paysage: p>
Voici ma solution, qui gère également la rotation. Pourrait par utile.