Estoy tratando de averiguar si es posible leer los datos del formulario PDF (Formularios rellenos y guardados con el formulario) usando iTextSharp. ¿Cómo puedo hacer esto?¿Cómo se leen los datos en PDF con iTextSharp?
Respuesta
Debería encontrar los nombres de los campos en el formulario PDF. Obtenga los campos y luego lea su valor.
string pdfTemplate = "my.pdf";
PdfReader pdfReader = new PdfReader(pdfTemplate);
AcroFields fields = pdfReader.AcroFields.Fields;
string val = fields.GetField("fieldname");
Obviamente en el código anterior, el nombre del campo es el nombre del campo de formulario PDF y el método GetField devuelve una representación de cadena de ese valor. Here es un artículo con código de ejemplo que probablemente pueda usar. Muestra cómo puede leer y escribir campos de formulario con iTextSharp.
Si está usando Powershell, el código descubrimiento de los campos es:
Add-Type -Path C:\Users\Micah\Desktop\PDF_Test\itextsharp.dll
$MyPDF = "C:\Users\Micah\Desktop\PDF_Test\something_important.pdf"
$PDFDoc = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList $MyPDF
$PDFDoc.AcroFields.Fields
Este código le dará los nombres de todos los campos de la Documento PDF, "something_important.pdf".
Esta es la forma de acceder a cada campo una vez que se conoce el nombre del campo:
$PDFDoc.AcroFields.GetField("Name of the field here")
Esto funcionó para mí! ¡Tenga en cuenta los parámetros al definir el estampador! '\ 0', la verdadera
string TempFilename = Path.GetTempFileName();
PdfReader pdfReader = new PdfReader(FileName);
//PdfStamper stamper = new PdfStamper(pdfReader, new FileStream(TempFilename, FileMode.Create));
PdfStamper stamper = new PdfStamper(pdfReader, new FileStream(TempFilename, FileMode.Create), '\0', true);
AcroFields fields = stamper.AcroFields;
AcroFields pdfFormFields = pdfReader.AcroFields;
foreach (KeyValuePair<string, AcroFields.Item> kvp in fields.Fields)
{
string FieldValue = GetXMLNode(XMLFile, kvp.Key);
if (FieldValue != "")
{
fields.SetField(kvp.Key, FieldValue);
}
}
stamper.FormFlattening = false;
stamper.Close();
pdfReader.Close()
El OP solo quería leer * datos de formulario PDF * (y obtuvo una buena respuesta para eso). Su código muestra cómo * cambiar los datos del formulario PDF. * – mkl
Lo sentimos, de hecho publicamos la respuesta en el hilo equivocado ...Esto significaba una explicación sobre cómo insertar valores en los campos y preservar la edición de formularios cuando el archivo se abre de nuevo ... – Serg
Tal vez la biblioteca iTextSharp ha cambiado recientemente, pero no fue capaz de obtener la respuesta aceptada para trabajar. Aquí está mi solución:
var pdf_filename = "pdf2read.pdf";
using (var reader = new PdfReader(pdf_filename))
{
var fields = reader.AcroFields.Fields;
foreach (var key in fields.Keys)
{
var value = reader.AcroFields.GetField(key);
Console.WriteLine(key + " : " + value);
}
}
Una diferencia muy sutil, debido a reader.AcroFields.Fields que devuelven un IDictionary en lugar de sólo un objeto AcroFields.
esto funciona, pero es realmente lento, toma más de un minuto leer ~ 3000 campos. ¿Alguien sabe una forma más rápida de enumerar estos? Intenté hacerlo en paralelo, pero eso no pareció ayudar. – DLeh
El nombre PDF es "REPORT.pdf" ..
El campo de datos para ser leídos en TextBox1 es "TextField25" en el PDF ..
Dim pdf As String = "report.pdf"
Dim reader As New PdfReader(pdf)
Dim fields As AcroFields = reader.AcroFields
TextBox1.Text = fields.GetField("TextField25")
Nota importante: Esto se puede usar SOLAMENTE SI el PDF no está aplanchado (significa que los campos deben ser editables) mientras se creó usando iTextSharp ..
es decir
pdfStamper.FormFlattening = False
Esto es muy simple .. Y funciona como un encanto .. :)
- 1. Compresión PDF con iTextSharp
- 2. iTextSharp PDF protegido con contraseña
- 3. ¿Cómo se leen los datos binarios en IE9?
- 4. Fusionando archivos PDF con ITextSharp
- 5. Creación de dos PDF idénticos con iTextSharp
- 6. iTextSharp + FileStream = Archivo PDF dañado
- 7. Cómo aplanar el formulario PDF ya lleno con iTextSharp
- 8. ¿Puedo completar un PDF encriptado con iTextSharp?
- 9. BadPasswordException al completar pdf con iTextSharp
- 10. iTextSharp para PDF: ¿cómo agregar archivos adjuntos?
- 11. iTextSharp muestra imágenes con mala calidad en PDF
- 12. ITextSharp insertar texto en un pdf existente
- 13. Convertir páginas de archivos PDF en imágenes con itextsharp
- 14. Insertar página en PDF existente usando itextsharp
- 15. Rotar PDF en C# usando iTextSharp
- 16. ¿Cómo se leen los datos de la base de datos SQLite?
- 17. ¿Cómo se leen los valores de transformación individuales en JavaScript?
- 18. ¿Cómo se leen los bloques de comentarios en PHP?
- 19. ¿Cómo se leen los datos binarios a través del terminal en serie en el programa C?
- 20. ¿Cómo se leen los números flotantes (real) de una base de datos SQLite en el iPhone?
- 21. ¿Cómo se leen los datos del portapapeles en el navegador cruzado?
- 22. ¿Cómo se leen los nombres de variables en un conjunto de datos SAS?
- 23. ¿Cómo se leen los datos de los archivos de base de datos .accdb de Microsoft Access en R?
- 24. Agregar una página al documento PDF con iTextSharp
- 25. ¿Cómo se leen los datos del dongle BT externo en core-java?
- 26. Bloquear PDF contra edición usando iTextSharp
- 27. ¿Cómo se leen los registros de cambios de CPAN?
- 28. itextsharp trimning pdf páginas del documento
- 29. iTextSharp está produciendo un PDF corrupto
- 30. ¿Cómo se leen los registros de bloqueo de iOS 4?
esto funciona como un encanto ... Me pregunto por qué no he mirado en esta función cuando .. Intenté cada otra función :). Muchas gracias ... me salvaste el fin de semana. – Bhuvan
Anuncio de servicio público: El siguiente código no le proporcionará lo que desea: 'pdfReader.AcroFields.Fields [" fieldName "]. Value'. Perdí unas horas antes de encontrar esta publicación. –
Hola. Creo que hay un error en la tercera línea de tu ejemplo. La forma correcta sería: 'AcroFields fields = pdfReader.AcroFields;' – cesAR