2011-12-03 9 views
10

Necesito tomar un archivo pdf existente y rellenar programáticamente una lista de campos de formulario con texto y luego guardar el pdf sin mostrarlo nunca al usuario.En iOS, ¿cómo puede rellenar programáticamente un campo de formulario en PDF?

Por ejemplo, si el archivo pdf contiene campos llamados "Apellido" y "Nombre", me gustaría establecer el valor de "Nombre" en "Louis" y luego guardar el archivo.

He estado buscando durante mucho tiempo y no puedo encontrar ninguna orientación incluso sobre dónde comenzar ya que la documentación de iOS (y la mayoría de las preguntas aquí) parecen orientadas a mostrar o crear contenido en pdf en lugar de modificarlo .

EDIT:
Mi pregunta principal es: ¿Es posible abrir una secuencia pdf (sé cómo hacer esto) y copiar cada elemento del diccionario PDF existente en un nuevo pdf? No he podido encontrar la forma de escribir los elementos del diccionario en un pdf.

+0

¿Alguna vez descubrió una forma de hacer esto? ¿Te importaría compartir lo que se te ocurrió? – xizor

+0

Desafortunadamente, no, no. Acabo de dejar los campos de formulario vacíos y cadenas escritas directamente en el archivo ... – lnafziger

+0

@lnafziger ¿Puede publicar algún código sobre cómo escribió las cadenas directamente en el archivo? He estado trabajando en esto, pero modificar el valor del formulario arruina cualquier dato binario en el archivo. – paulrehkugler

Respuesta

0

Esto sería más fácil de hacer con una página HTML. Si desea utilizar una página HTML en lugar de una forma .pdf continuación thius es cómo se van haciendo sobre él:

[field1 setText:@"Field 1 Text"]; 
[field2 setText:@"Field 2 Text"]; 

NSString *result; 
result = [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"$('#field1').val('%@');", field1.text]]; 
result = [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"$('#pfield2').val('%@');", field2.text]]; 
result = [webView stringByEvaluatingJavaScriptFromString:@"$('#submitbutton').click();"]; 

Usted tendría que crear dos o UILabels UITextFields y llamarlos "campo2" y "campo2 "en tu archivo .h A continuación, puede encontrar la ID del campo que necesita reemplazar, p. # field1 y luego ponerlo donde he puesto "# field1" y nuevamente para el segundo campo donde he puesto "# field2". También debe haber un UIWebView con la página ya cargada. Este código se utilizará después de se ha cargado la página UIWebView. Tal vez haga lo siguiente:

-(void)webViewDidFinishLoad:(UIWebView *)webView { 

// Insert above code here 

} 

es probable que tenga una comprensión completa de JavaScript si desea hacer esto para todo el formulario, pero esto debe empezar.

Espero que te ayude.

+0

¡Gracias por los ejemplos, sin embargo, esto tiene que estar en un pdf! – lnafziger

+2

¿No podría convertir el html en un PDF? – pixelbitlabs

+1

Desafortunadamente, este es un pdf existente, muy complicado que cambia regularmente, así que no quiero recrearlo (y mantenerlo) en código (ni como una página web ni para crear el pdf sobre la marcha). – lnafziger

1

Dudo que ese tipo de funcionalidad vaya a estar en los marcos de iOS. La razón por la cual la mayoría de la información relacionada que puede encontrar "parece [s] orientada a mostrar o crear contenido en formato PDF en lugar de modificarla" es porque eso es lo que la mayoría de los casos de uso querrá o necesitará para la funcionalidad de PDF.

Deberá buscar una biblioteca de terceros que pueda abrir archivos PDF, completar los campos de AcroForm y luego eliminar un PDF. Yo uso iText en Java (también hay iTextSharp para C#), pero no conozco nada para Objective-C.

Una vez que encuentre esa biblioteca, deberá integrarla en su proyecto. Sin duda hay varias preguntas/respuestas relacionadas aquí en SO para cualquier versión del SDK que esté usando.

+0

Gracias por la entrada, sin embargo, no quiero una biblioteca de terceros. Quiero utilizar las funciones de marco de iOS para escribir una solución genérica (que compartiré con otros cuando la termine). Después de leer gran parte de la documentación de iOS, estoy bastante seguro de que se puede hacer, ¡pero esperaba que alguien más familiar pudiera orientarme en la dirección correcta! – lnafziger

+0

Shaggy Frog tiene razón, la API CGPDF * no es compatible con la modificación de PDF, incluido el llenado de campos de formulario. – iPDFdev

+2

Si bien CGPDF no permite la modificación directa, el resultado final es lo que estoy buscando. El enfoque en el que estoy pensando es abrir la secuencia de pdf, copiar cada elemento del diccionario, modificar el contenido de los campos del formulario y guardarlo en un nuevo pdf. Sin embargo, la parte con la que necesito ayuda es asegurarme de copiar todo el pdf, ya que las rutinas que he analizado permiten extraer partes específicas del pdf en lugar de dar acceso a todo el documento. Creo que lo que estoy buscando es una forma de abrir una secuencia y copiarla de a un elemento a un nuevo archivo que termina con archivos idénticos. – lnafziger

Cuestiones relacionadas