Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/10/2013, 12:12
LOD_Fredy
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 15 años
Puntos: 3
Problemas ITextSharp y Asp.Net

Hola a todos.

Hoy vengo con un problema con el ITextSharp que me ayuda a pasar una página html a pdf, el caso es que funciona bien si quiero descargar un pdf, al querer descargar más de uno no lo hace, solo descarga uno siempre, me imagino que es problema de los navegadores o al menos algo de eso he leído. He intentado varias cosas pero ninguna me permite crear varios pdf desde código, aquí les dejo el código para generar los pdf, funciona con una variable de sesión que guarda el id actual y en la consulta busca por el siguiente y así hasta recorrerlos todos, mandando un mensaje de que terminó sin problemas:

Código ASP.NET:
Ver original
  1. DataTable DT;
  2.                     string directorio = oMBDD.Consulta1Dato("consulta");
  3.  
  4.  
  5.                     if (!Directory.Exists(Server.MapPath("~/" + directorio)))
  6.                     {
  7.                         Directory.CreateDirectory(Server.MapPath("~/" + directorio));
  8.                     }                    
  9.  
  10.                     if (Session["paciente_id"] == null)
  11.                         DT = oMBDD.ConsultaDT("consulta limit 1");
  12.                     else
  13.                         DT = oMBDD.ConsultaDT("consulta limit 1");
  14.                     if (DT.Rows.Count > 0)
  15.                     {
  16.                         try
  17.                         {                                                                                  
  18.                             Session["paciente_id"] = DT.Rows[0]["id"].ToString();                              
  19.                             capa.InnerHtml += "<h2>" + DT.Rows[0]["nombre"].ToString() + "</h2>";
  20.                            
  21.                             StringWriter sw = new StringWriter();
  22.                             HtmlTextWriter hw = new HtmlTextWriter(sw);
  23.                             this.Page.RenderControl(hw);
  24.                             StringReader sr = new StringReader(sw.ToString());
  25.                             Document pdfDoc = new Document(PageSize.LETTER, 5f, 5f, 5f, 5f);
  26.                             HTMLWorker htmlparser = new HTMLWorker(pdfDoc);                                
  27.                             PdfWriter.GetInstance(pdfDoc, new FileStream(Server.MapPath("" + directorio + "/" + DT.Rows[0]["nombre"].ToString() + ".pdf"), FileMode.Create));                                
  28.                             pdfDoc.Open();
  29.                             htmlparser.Parse(sr);
  30.                             pdfDoc.Close();  
  31.                             Response.Write(pdfDoc);
  32.                             Response.End();
  33.                             Response.Redirect("Expediente.aspx");
  34.                             string x = "window.location='http://dozsoluciones.com.mx/reportesdozmed/Expediente.aspx';";
  35.                             string script = @"<script type='text/javascript'>" + x +
  36.                             "</script>";
  37.  
  38.                             ScriptManager.RegisterStartupScript(this, typeof(Page), "Alerta2", script, false);
  39.                            
  40.                         }
  41.                         catch (Exception ex)
  42.                         {
  43.                             Response.Write(ex.Message);
  44.                         }
  45.                     }
  46.                     else
  47.                         Response.Write("Respaldo finalizado exitosamente");

Y este es el error que me indica:

A page can have only one server-side Form tag.

De hecho la generación del pdf funciona bien y lo guarda en el servidor, pero el que salga ese error no permite que la página se este "refrescando" y por ende creando automáticamente los pdf, además de que no es muy bonito que le esté saliendo una ventana de error tan fea como esa xD.

Gracias de antemano y ojalá alguien sepa como arreglar esto o como debería ser el código para que no marque este error (ni ningún otro xD).