Cómo configurar la anotación en un documento PDF que sea visible para todos los lectores de PDF no solo para una aplicación particular

Hola amigos, estoy tratando de crear la anotación de la página PDF como algo parecido a la image siguiente en mi aplicación y esta anotación es visible para todos los demás lectores de PDF

Por ejemplo:-

Creo un documento PDF en Mi aplicación y agrego Anotación y luego envío este documento a Mi correo amigo. Luego, mi amigo descarga este PDF y se abre en la Preview aplicación de Mac, a continuación, creó la anotación de PDF que debería mostrarse.

Estoy haciendo RND de Este material y también Leo iOS proporciona Doc sobre Quartz 2D . Logré leer y crear PDF con éxito usando este Quartz 2D pero ahora no tengo ninguna forma de hacer cosas de Anotación.

También estudio ese tipo de preguntas SO:

Crear annotations en PDF en iOS

Crear annotations en PDF con cuarzo (iOS)

annotations en pdf en el objective c

También hice una anotación con el PDF de lectura de aplicaciones y almaceno el punto de xy poción de capas en una página PDF específica. Ahora, ¿qué ocurre cuando envío este documento PDF a otro usuario que abre este documento en otros lectores de PDF?

También hablo de este grupo de chat SO. uno de Stack-overflow User me sugiere que use CGLayer para hacer esta tarea, pero estoy muy confundido sobre cómo lograr esto y cómo implementar esto.

Ayúdame y guíame en estas cosas.

introduzca la descripción de la imagen aquí

La respuesta es simplemente no, no puedes crear annotations PDF estándar con las API de iOS. La API CGPDF * es de solo lectura y se puede usar solo para leer files PDF y la API CoreGraphics con context PDF solo puede crear páginas PDF simples sin annotations, campos de formulario, marcadores, etc.
Si crea nuevos files PDF, puede cambiar a libHaru, que admite annotations, pero si desea agregar annotations a los files PDF existentes, no tiene suerte (libHaru no puede cargar files PDF). También hay IFXPDFFactory pero está en desarrollo y no sé si admite las annotations todavía.

Primero, no sé si solo es debido a la complejidad que las personas sugieren las costosas bibliotecas de PDF iOS o si las promocionan comentando que esto y lo otro no pueden hacerse sin testings previas.

Puede agregar y save annotations en el file pdf e incluso exportarlo.

 NSURL *OriginalPdfPath = [[NSBundle mainBundle] URLForResource:@"yourPDFname" withExtension:@"pdf"]; NSString *string=[OriginalPdfPath path]; NSError *error; //Load original pdf data: NSData *pdfData = [NSData dataWithContentsOfFile:string options:NSDataReadingUncached error:&error]; if (error) { NSLog(@"%@", [error localizedDescription]); return; } else { NSLog(@"Data has loaded successfully."); } NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *pathLD = [documentsDirectory stringByAppendingPathComponent:@"dirName"]; // get directory NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath:pathLD]) { [fileManager createDirectoryAtPath:pathLD withIntermediateDirectories:YES attributes:nil error:nil]; } pathLD = [pathLD stringByAppendingPathComponent:@"yourPDFname.pdf"]; // add file path BOOL isDir; if (![fileManager fileExistsAtPath:pathLD isDirectory:&isDir]) { BOOL didsave=[fileManager createFileAtPath:pathLD contents:pdfData attributes:nil]; } NSURL *url = [NSURL fileURLWithPath:string]; CGPDFDocumentRef document = CGPDFDocumentCreateWithURL ((__bridge_retained CFURLRef) url); size_t count = CGPDFDocumentGetNumberOfPages(document); if (count == 0) { NSLog(@"PDF needs at least one page"); return; } 

// Ahora trabaje con el file pdf

  UIGraphicsBeginPDFContextToFile(pathLD , CGRectZero, nil); CGContextRef currentContext = UIGraphicsGetCurrentContext(); CGPDFPageRef page = CGPDFDocumentGetPage (document, 1); CGRect paperSize = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox); UIGraphicsBeginPDFContextToFile(pathLD , CGRectZero, nil); UIGraphicsBeginPDFPageWithInfo(paperSize, nil); 

// Voltear el context para que la página de PDF se muestre hacia arriba.

  CGContextTranslateCTM(currentContext, 0.0, paperSize.size.height); CGContextScaleCTM(currentContext, 1.0, -1.0); CGContextDrawPDFPage (currentContext, page); 

// Función mágica aquí: renderizar la capa de la vista de annotations en el context

  [drawingView.layer renderInContext:currentContext]; UIGraphicsEndPDFContext(); CGPDFDocumentRelease (document); 

Esto guarda todo lo que representa en el context actual del pdf en el Administrador de files
puede probar eso con un model Visualizar Visualizar VC en una WebView:

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. [self displayPdfinWebView]; } -(void)displayPdfinWebView { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory =[paths objectAtIndex:0]; NSString *pathLD = [documentsDirectory stringByAppendingPathComponent:@"dirName"]; // get directory pathLD = [pathLD stringByAppendingPathComponent:@"yourPDFname.pdf"]; // add file path NSFileManager *fileManager = [NSFileManager defaultManager]; NSData *data; NSURL* pdfUrl; if ([fileManager fileExistsAtPath:pathLD]) { pdfUrl = [NSURL fileURLWithPath:pathLD]; [webView loadRequest:[NSURLRequest requestWithURL:pdfUrl]]; } } 

Supongo que puede conectarse a iBooks con UIDocumentInteractionController para exportar. Mis references es el dibujo de ApplePDF .