2016-02-17 2 views
0

Я пытаюсь нарисовать изображение поверх существующего PDF (отображается на экране). Конечной целью было бы подписать PDF в любом месте.Рисованное изображение над PDF перевернуто

My sample code is here on Github

Код (основной) работает следующим образом:

  • пользователь щелкает, где он хочет, чтобы сделать изображение на
  • Редактирование PDF происходит и на экране
  • появится окончательный PDF

Однако проблема в том, что мое изображение выглядит с ног на голову. Во время работы с PDF я узнал, что вам нужно перевернуть контекст для рендеринга, это может быть связано.

- (void)editPDFWithName:(NSString*)pdfName 
{ 
// grab reference to bundled PDF 
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)[[NSBundle mainBundle] URLForResource:pdfName withExtension:@"pdf"]); 

const size_t numberOfPages = CGPDFDocumentGetNumberOfPages(pdf); 

// Begin PDF context 
NSMutableData* data = [NSMutableData data]; 
UIGraphicsBeginPDFContextToData(data, CGRectZero, nil); 

// loop over PDF pages to render it 
for(size_t page = 1; page <= numberOfPages; page++) 
{ 
    // Get the current page and page frame 
    CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdf, page); 
    const CGRect pageFrame = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox); 

    UIGraphicsBeginPDFPageWithInfo(pageFrame, nil); 

    // Draw the page (flipped) 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(ctx); 

    // Y axis is negative in order to render PDF (mandatory) 
    CGContextScaleCTM(ctx, 1, -1); 
    CGContextTranslateCTM(ctx, 0, -pageFrame.size.height); 
    CGContextDrawPDFPage(ctx, pdfPage); 
    CGContextRestoreGState(ctx); 

    if(page == [self getCurrentPage]) 
    { 
     // 0.75f factor to convert pixel/points 
     CGContextDrawImage(ctx, CGRectMake(self.xTouchCoord*0.75f, self.yTouchCoord*0.75f, self.logo.size.width, self.logo.size.height), self.logo.CGImage); 
    } 

} 
UIGraphicsEndPDFContext(); 

CGPDFDocumentRelease(pdf); 
pdf = nil; 

// Save PDF 
[self savePDF:data]; 

}

I tried multiple ways to flip image as suggested on this post

Но изображение еще переворачивается.

Одна вещь, которую я заметил, если я использую метод метод drawAtPoint на изображение, оно появляется не переворачивается, но не появляется в указанной позиции, как есть смещение (see other post here)

Может кто-то пожалуйста, предложить какой-либо идея? Я ставлю на контекстные методы «Сохранить и Восстановить», но не могу заставить его работать.

ответ

0

Ну я наконец нашел решение:

  • использование drawInRect вместо CGContextDrawImage
  • для лучшей точности, не забудьте вычесть половину ширины и высоты с координатами для регулировки центра:

    // 0.75f factor to convert pixel/points 
        [self.logo drawInRect:CGRectMake(self.xTouchCoord*0.75f - self.logo.size.width/2, self.yTouchCoord*0.75f - self.logo.size.width/2, self.logo.size.width, self.logo.size.height)]; 
    
Смежные вопросы