Visual CSharp .NET - Buscar texto en PDFs y crear tantos PDFs como textos buscados

   
Vista:

Buscar texto en PDFs y crear tantos PDFs como textos buscados

Publicado por Kinan (1 intervención) el 28/11/2014 13:55:17
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#:
1
2
3
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

La FUNCION!!!!

Código C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Buscar texto en PDFs y crear tantos PDFs como textos buscados

Publicado por Miguel (8 intervenciones) el 26/12/2014 18:47:38
Es un poco antigua la pregunta, pero igualmente; me parece que tienes que volver a declarar "Copy" (Copy = new PdfCopy(NuevoPDF, new FileStream(NombreFichSalida, FileMode.OpenOrCreate));).

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar