Рисование PDF правой стороной вверх в CGContext - PullRequest
3 голосов
/ 17 марта 2010

Я переопределяю метод drawRect: в пользовательском UIView, и я делаю несколько пользовательских чертежей. Все шло хорошо, пока мне не понадобилось рисовать ресурс PDF (точнее, векторный глиф) в контексте. Сначала я извлекаю PDF из файла:

NSURL *pdfURL = [NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"CardKit.bundle/A.pdf"]];
CGPDFDocumentRef pdfDoc = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfDoc, 1);

Затем я создаю коробку с такими же размерами, что и загруженный PDF:

CGRect box = CGPDFPageGetBoxRect(pdfPage, kCGPDFArtBox);

Затем я сохраняю свое графическое состояние, чтобы ничего не испортить:

CGContextSaveGState(context);

А затем я выполняю масштабирование + перевод CTM, теоретически переворачивая весь контекст:

CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0.0, rect.size.height);

Затем я масштабирую PDF-файл так, чтобы он правильно вписывался в вид:

CGContextScaleCTM(context, rect.size.width/box.size.width, rect.size.height/box.size.height);

И, наконец, я рисую PDF и восстанавливаю графическое состояние:

CGContextDrawPDFPage(context, pdfPage);
CGContextRestoreGState(context);

Проблема в том, что ничто не видно нарисовано. Весь этот код должен теоретически нарисовать глиф PDF в представлении, верно?

Если я удаляю масштаб + перевод, используемый для переворачивания контекста, он отлично рисует: он просто переворачивает вверх ногами.

Есть идеи?

Ответы [ 4 ]

10 голосов
/ 17 марта 2010

Попробуйте выполнить перевод до шкалы:

CGContextTranslateCTM(context, 0.0, rect.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
2 голосов
/ 18 ноября 2010
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);

CGPDFPageRef page = CGPDFDocumentGetPage(pdf, currentPage);
CGContextSaveGState(context);




CGRect box = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);

CGContextScaleCTM(context, self.bounds.size.width/box.size.width, self.bounds.size.height/box.size.height);
CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);

Это правильный ответ на ваш вопрос

0 голосов
/ 11 января 2013

Это переворачивает все правильно для меня:

pdfDisplayView.layer.geometryFlipped = YES; //(NO) 
0 голосов
/ 26 июля 2011

Чтобы масштабировать перед переводом, я думаю, мы можем поставить минус при переводе.

CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0.0, -rect.size.height);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...