Nombre: Cómo modificar datos en un PDF
Descripción:
Aquí os muestro cómo acceder a los campos de un PDF y a sus datos y recuperarlos o modificarlos según sea necesario.
Para crear el PDF interactivo he utilizado Adobe LiveCycleDesigner 8.0 y para modificarlo desde código he usado la librería itextsharp-4.1.0-dll. Esta librería es gratuita y la podéis encontrar en el siguiente enlace:
http://sourceforge.net/project/showfiles.php?group_id=72954
Debéis agregar la referencia correspondiente a la dll, en caso de que no la cargue por defecto.
En el código recupero los campos y sus datos y los muestro en un textbox y luego creo un PDF nuevo a partir del que he leído asignándole datos nuevos.
Espero que os sirva.
URL: http://mygnet.net/codigos/csharp/net/como_modificar_datos_en_un_pdf.2667
Código Fuente:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.xml;
using System.IO;
namespace PdfGenerator
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ListaNombresCampos();
RecuperaCampos();
FillForm();
}
/// <summary>
/// Muestra todos los campos del formulario en un textbox.
private void ListaNombresCampos()
{
string pdfTemplate = @"D:PdfGeneratorInformacionBasica1.pdf";
// Título de formulario
this.Text += " - " + pdfTemplate;
// crea un PDF reader nuevo basado en la plantilla del documento PDF
PdfReader pdfReader = new PdfReader(pdfTemplate);
// crea un StringBuilder con los nombres de los campos del PDF
StringBuilder sb = new StringBuilder();
foreach (DictionaryEntry de in pdfReader.AcroFields.Fields)
{
sb.Append(de.Key.ToString() + Environment.NewLine);
}
// Escribe el contenido del StringBuilder en el textbox del formulario
textBox1.Text = sb.ToString();
textBox1.SelectionStart = 0;
}
private void RecuperaCampos()
{
int i;
string campo;
string pdfTemplate = @"D:PdfGeneratorInformacionBasica1.pdf";
PdfReader pdfReader = new PdfReader(pdfTemplate);
AcroFields pdfFormFields = pdfReader.AcroFields;
StringBuilder sb = new StringBuilder();
i = 1;
campo = "";
foreach (DictionaryEntry de in pdfReader.AcroFields.Fields)
{
switch (i)
{
case 1:
campo = "c1";
break;
case 2:
campo = "c2";
break;
case 3:
campo = "c3";
break;
case 4:
campo = "c4";
break;
}
string sTmp = "campo " + i.ToString() + " = " + pdfFormFields.GetField(campo);
sb.Append(sTmp.ToString() + Environment.NewLine);
i++;
}
textBox1.Text = sb.ToString();
textBox1.SelectionStart = 0;
pdfReader.Close();
}
private void FillForm()
{
string pdfTemplate = @"D:PdfGeneratorInformacionBasica1.pdf";
string newFile = @"D:PdfGeneratorcompleted_InformacionBasica1.pdf";
PdfReader pdfReader = new PdfReader(pdfTemplate);
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(
newFile, FileMode.Create));
AcroFields pdfFormFields = pdfStamper.AcroFields;
// Asigna los campos
pdfFormFields.SetField("c1", "dato 1");
pdfFormFields.SetField("c2", "dato 2");
pdfFormFields.SetField("c3", "dato 3");
pdfFormFields.SetField("c4", "dato 4");
string sTmp = "Datos asignados";
MessageBox.Show(sTmp, "Terminado");
// Cambia la propiedad para que no se pueda editar el PDF
pdfStamper.FormFlattening = false;
// Cierra el PDF
pdfStamper.Close();
}
}
}