Foros del Web » Programación para mayores de 30 ;) » .NET »

Buscar texto en PDFs y crear tantos PDFs como textos buscados

Estas en el tema de Buscar texto en PDFs y crear tantos PDFs como textos buscados en el foro de .NET en Foros del Web. Buenos días a tod@s Me encuentro en un punto que necesito que alguien vea el código con "otros ojos" y me pueda dar luz para ...
  #1 (permalink)  
Antiguo 28/11/2014, 06:32
 
Fecha de Ingreso: noviembre-2014
Mensajes: 1
Antigüedad: 9 años, 4 meses
Puntos: 0
Pregunta Buscar texto en PDFs y crear tantos PDFs como textos buscados

Buenos días a tod@s

Me encuentro en un punto que necesito que alguien vea el código con "otros ojos" y me pueda dar luz para sacar esta función adelante. Gracias de antemano.

Vamos al lío ...A la función en sí, se le pasan como argumentos el nombre que se le pone al pdf resultante y el texto a buscar, en el cuerpo de la función se recorre una lista de string (lstStr) donde cada elemento de la lista corresponde a texto que contiene los pdfs antes procesados y lstFichCarpeta que son los nombres de dichos ficheros, por supuesto si hay tres elementos en lstFichCarpeta hay tres elementos en lstStr. Mi problema es que de la manera que lo he pensado y después de cambiarlo muchas veces ahora me da un error en la variable Copy (Uso de la variable local no asignada 'Copy') que os subrayo en el código.

A ver si alguien me puede dar luz sobre el tema. Gracias

Código C#:
Código:
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
La FUNCION!!!!

Código C#:
Código:
private void Busca_Extrae(string NombreFichSalida, string sTextoBusqueda)
{
      try
      {
          iTextSharp.text.Document NuevoPDF;
          iTextSharp.text.pdf.PdfCopy Copy;
          //expresiones regulares
          Regex re = new Regex(sTextoBusqueda.Trim(), RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
          int iFich = 0; //Contador de la lista de ficheros de la carpeta
          NuevoPDF = new Document();
          foreach (string sStr in lstStr) //Recorremos el contenido de los ficheros que se han cargado
          {
              PdfReader Reader = new PdfReader(new RandomAccessFileOrArray(lstFichCarpeta[iFich]), null);
              //Busca a traves de todo el texto del PDF, si encuentra al menos una ocurrencia la procesa
              if (re.Match(sStr).Success)
              {
                  if (!NuevoPDF.IsOpen())
                 {
                     //sabemos que hay se ha encontrado texto, abrimos el fichero
                     Copy = new PdfCopy(NuevoPDF, new FileStream(NombreFichSalida, FileMode.OpenOrCreate));
                     NuevoPDF.Open(); 
                  }
                  //Pasamos de tener un string sStr a tener un array de string con una página del pdf
                  //en cada celda del array StrArr
                  string[] StrArr = sStr.Split('\f');  
                  int Paginas = Reader.NumberOfPages;
                  string StrAux;
                  for (int i = 1; i <= Paginas; i++)  //recorremos las paginas del documento activo
                  {
                      StrAux = StrArr[i - 1];           //Array base 0, tomo el valor de i-1
                      if (re.Match(StrAux).Success)     //Usamos RegEx para la búsqueda de texto
                      {  // Si encontramos el texto en la página lo cargamos en el nuevo pdf
                         Copy.AddPage(Copy.GetImportedPage(Reader, i));
                       }
                  } //for .. next
                  StrAux = null;
                  Copy.FreeReader(Reader);                      
                  iFich += 1;
              }
              Reader.Close();
          }
          if (NuevoPDF.IsOpen())
          {
              NuevoPDF.Close();
          }
      }
      catch
      {
          MessageBox.Show("Error. No se ha podido extraer la página o crear el nuevo archivo PDF");
      }
  }
Animaros a echarle un vistazo.

Última edición por kinan; 28/11/2014 a las 06:39

Etiquetas: c#, itextsharp, pdf, visual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:18.