▷ Código Ejemplo PDFSharp C# - Extraer Paginas en archivos PDF

La idea de este post es mostrar como podemos separar o extraer a partir de un archivo PDF las paginas de éste y crear cada una en un archivo PDF.

Para este ejemplo utilizaremos la libreria gratuita llamada PDFSharp, es un componente OpenSource y es desarrollada en Visual Studio C#.

La cual la podemos descargar a travez de la siguiente URL:
  • http://sourceforge.net/projects/pdfsharp/files/pdfsharp

Como separar paginas PDF en archivos con PDFSharp (C#)

Vamos al grano, para utilizar el siguiente código, cree un nuevo proyecto, por ejemplo Aplicación Windows Forms de C#. Dentro del proyecto agregue la referencia del componente descargado PdfSharp.dll

Agregamos los Using


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Captura_Fuid.Clases;
using System.IO;
using PdfSharp.Pdf.IO;
using PdfSharp.Pdf;

private void SplitPDF()
{
    string sPath;// = Directory.GetCurrentDirectory();
    string sNameFile = string.Empty;
    string sPathF = string.Empty;
    string Destino = string.Empty;
    string sPathLocal = string.Empty;

    if (dt.Rows.Count > 0)
    {
        //Ruta en donde quedaran los archivos PDF
        sPathLocal = ConfigurationManager.AppSettings["PathVisorFuid"].ToString();
        Destino = ConfigurationManager.AppSettings["PathDestino"].ToString();

        //Objeto que tiene el archivo de salida
        PdfSharp.Pdf.PdfDocument Outpdf = new PdfSharp.Pdf.PdfDocument();

        //objeto que contiene el archivo de entrada con todas las paginas
        PdfSharp.Pdf.PdfDocument Inputpdf = PdfReader.Open(Destino,                                      PdfDocumentOpenMode.Import);

        //Consulto cuantas paginas tiene el archivo
        int count = Inputpdf.PageCount;

        int Fila = 0;
        for (int idx = 0; idx < count; idx++)
        {
            Outpdf = new PdfSharp.Pdf.PdfDocument();
            //Se extrae la pagina
            PdfPage page = Inputpdf.Pages[idx];

            //Se agrega la pagina al objeto document de salida
            Outpdf.AddPage(page);
            Fila = idx + 1;

            //Para este ejemplo se arma el nmbre del archivo
            sNameFile = "Page_" + Fila + ".pdf";
            sPathF = sPathLocal + sPath + "/" + sNameFile;
            if (!File.Exists(sPathF))
            {
               Outpdf.Save(sPathF);
            }
        }
     }
}
Share:

Random: Generar cadenas de texto aleatorio C#

Hoy les traigo un ejemplo que considero que debe estar publicado en Devcate, por la necesidad e importancia a la hora de generar nombres aleatorios, ya sea para identificar un objeto único en base de datos, un usuario o producto. Este ejemplo se realiza a partir de la librería Random de .Net, que es muy utilizado también para generar números aleatorios.


Ejemplo Random Code Generator C#

Miremos el código:

private string GenerarCodigo()
{
   Random obj = new Random();
   string sCadena = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
   int longitud = sCadena.Length;
   char cletra;
   int nlongitud = 5;
   string sNuevacadena = string.Empty;
   
   for (int i = 0; i < nlongitud; i++)
   {
       cletra = posibles[obj.Next(nlongitud)];
       sNuevacadena += cletra.ToString();
   }
   return sNuevacadena;

}

En el ejemplo anterior, se crea una función llamada GenerarCodigo que retorna una cadena de 5 caracteres, espero les sea de mucha utilidad.
Share:

Validar el formato de un correo electrónico en C#

Muchas veces tenemos la necesidad de validar en .Net el correo electronico que es ingresado por un usuario en un formulario o sitio web. En este caso se valida mas de un correo separado por punto y coma (;)  e identifica que correo es valido. Si no es valido lo deja en blanco.

ValidarCorreoElectronico("Correoinvalido{{@prueba.com;CorreoValido@hotmail.com"
 
private string ValidarCorreoElectronico(string sCorreoElectronico)
    {
        string sCorreo = string.Empty;

        if (sCorreoElectronico != string.Empty)
        {
            String[] sMail = sCorreoElectronico.Split(new Char[] { ';' });            
            for (int I = 0; I < sMail.Length; I++)
            {
                if (ValidarFormatoCorreo(sMail[I].ToString()))
                {
                    sCorreo = sMail[I].ToString() + ";" + sCorreo;
                }
            }
        }
        if (sCorreo != string.Empty)
            sCorreo = sCorreo.Substring(0, sCorreo.Length - 1);

        return sCorreo;
    }

    private Boolean ValidarFormatoCorreo(String email)
    {
        String expresion;
        expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
        if (Regex.IsMatch(email, expresion))
        {
            if (Regex.Replace(email, expresion, String.Empty).Length == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
Share:

Select DISTINCT From Datatable Using C# Parte II

Existe siempre la necesidad de realizar un Select Distinct a un DataTable cuando las filas están repetidas. En esta ocasión les comparto una nueva solución en .Net C# que permite devolver los resultados con mas de una columna. 


using System.Data;

public DataTable SelectRowDisctinct(DataTable dtData, string sColumnName)
{
 try
 {                
  DataTable distintos = dtData.DefaultView.ToTable(true, sColumnName);
  DataTable dtNew = new DataTable();
  foreach (DataColumn dcName in dtData.Columns)
  {
   dtNew.Columns.Add(new DataColumn(dcName.Caption,dcName.DataType));
  }
   
  foreach (DataRow drRow in distintos.Rows)
  {
   dtNew.ImportRow(dtData.Select(sColumnName + " = '" + drRow[0] + "'")[0]);
  }
  return dtNew;
 }
 catch (Exception ex)
 {
  throw (ex);
 }
}

Espero les pueda servir, de un Select DISTINCT From Datatable Usando C#
Share:

Javascript Validar números en Firefox, Chrome, IE

En una publicación anterior, pudimos Validar sólo números en Javascript, la cual nos ha permitido solucionar muchos inconvenientes.

En esta ocasión les quiero compartir una validación de solo números mucho mas completa, es decir contempla navegadores como Chrome, Internet Explorer (IE) y Firefox

A continuación les muestro el código, espero que les ayude.
var nav4 = window.Event ? true : false;
function SoloNumeros(evt) {
    // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
    var key = nav4 ? evt.which : evt.keyCode;
    return (key <= 13 || (key >= 48 && key <= 57 || key == 46));
}
Para implementarlo en Asp.Ner C# incluimos nuestro código anterior en un archivo .js y referenciarlo en nuestra pagina .aspx, así:
script src="../Scripts/Utilidad.js" type="text/javascript"></script>

Y para llamar la función la podemos implementar en una caja de texto así:

asp:TextBox ID="txtnFactura" runat="server"  onkeypress="return SoloNumeros(event);"></asp:TextBox>

Share:

Como buscar procedimiento almacenado si esta programado como Job

A continuacion podemos ver como buscar un procedimiento almacenado en Sql Server si esta programado como Job:

select sj.*
from msdb.dbo.sysjobs sj
inner join msdb.dbo.sysjobsteps sjs on sj.job_id = sjs.job_id
inner join msdb.dbo.sysjobschedules sjsc on sjs.job_id = sjsc.job_id
where sjs.command like'%Nombreprocedimientoalmacenado%'
Share:

Como Eliminar un Row de un Gridview en C#

El siguiente formato HTML consiste en un GridView de C# con dos columnas BoundField y una columna CommandField así:

<asp:GridView ID="GridView1" CssClass = "Grid" runat="server" OnRowDeleting="OnRowDeleting" AutoGenerateColumns ="false" OnRowDataBound = "OnRowDataBound">
    <Columns>
        <asp:BoundField DataField="Item" HeaderText="Item" />
        <asp:BoundField DataField="Price" HeaderText="Price" />
        <asp:CommandField ShowDeleteButton="True" ButtonType="Button" />
    </Columns>
</asp:GridView>

Dentro del evento de carga de la página , el ASP.Net GridView se rellena usando un DataTable y DataTable se guarda en la variable ViewState.

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Item"), new DataColumn("Price") });
        dt.Rows.Add("Shirt", 450);
        dt.Rows.Add("Jeans", 3200);
        dt.Rows.Add("Trousers", 1900);
        dt.Rows.Add("Tie", 185);
        dt.Rows.Add("Cap", 100);
        dt.Rows.Add("Hat", 120);
        dt.Rows.Add("Scarf", 290);
        dt.Rows.Add("Belt", 150);
        ViewState["dt"] = dt;
        BindGrid();
    }
}
protected void BindGrid()
{
    GridView1.DataSource = ViewState["dt"] as DataTable;
    GridView1.DataBind();
}



Aplicando el cuadro de confirmación JavaScript para GridView CommandField Borrar Button

Dentro del controlador de eventos OnRowDataBound, un bucle se ejecuta en los controles Button del GridView. Si el CommandName del botón es Eliminar continua mostrando el cuadro de confirmación se asignando su atributo OnClic.

protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        string item = e.Row.Cells[0].Text;
        foreach (Button button in e.Row.Cells[2].Controls.OfType<Button>())
        {
            if (button.CommandName == "Delete")
            {
                button.Attributes["onclick"] = "if(!confirm('Do you want to delete " + item + "?')){ return false; };";
            }
        }
    }
}
Elimine el ASP.Net GridView Fila usando CommandField y eventos OnRowDeleting

Cuando se hace clic en el botón Eliminar, se ejecuta el controlador de eventos OnRowDeleting. Dentro del controlador de eventos OnRowDeleting, el Índice del GridView fila se determina y se y se utiliza para eliminar la Línea de DataTable.

Por último, el DataTable se guarda de nuevo a la ViewState y el GridView está nuevamente poblada. A continuación puedes visualizar como se Elimina un Row de un GridView de forma fácil.


protected void OnRowDeleting(object sender, GridViewDeleteEventArgs e)
{
    int index = Convert.ToInt32(e.RowIndex);
    DataTable dt = ViewState["dt"] as DataTable;
    dt.Rows[index].Delete();
    ViewState["dt"] = dt;
    BindGrid();
}
Share:

Mantener el valor de un TextBox en TextMode = Password c#, ASP.Net

He tenido la dificultad en Asp.Net, luego de recuperar la contraseña de base de datos y visualizarla en una caja de texto, la cual esta configurada en Modo TextMode Password, ésta no se pueda ver.

<asp:textbox id="txtClave" runat="server" textmode="Password"></asp:textbox>


Cuando el valor se asigna al control, éste no se puede ver y peor aun en el postback de la pagina, pierde el valor.

La solución consiste en asignar el valor que queremos que teme el control como un atributo. Si además queremos que la clave se mantenga entre Postbacks, bastará con que asignemos el valor cada vez que recarga la página:

protected void Page_Load(object sender, EventArgs e)
{
    txtClave.Attributes.Add("value", txtClave.Text);
}
Share:

Como usar los eventos onblur, onfocus, onchance, sobre un TextBox en ASP.Net

Hola como están, espero que bien, hoy quiero compartir un ejemplo muy sencillo de como usar los eventos onblur, onfocus, entre otros sobre un control Textbox en ASP.Net.

Primero creamos una pagina web con una caja de Texto:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Example.aspx.cs" Inherits="Example" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox Id="txtTexto" runat="server"></asp:TextBox>    
    </div>
    </form>
</body>
</html>


Seguidamente creamos un botón asp.net dentro de un <div> oculto así:

<div style="display: none;">
        <asp:button id="btnTextBox" runat="server" onclick="btnTextBox_Click">
</asp:button></div>


Quedando la pagina:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Example.aspx.cs" Inherits="Example" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox Id="txtTexto" runat="server"></asp:TextBox>   
    </div>
   
    <div style="display: none;">
        <asp:button id="btnTextBox" runat="server" onclick="btnTextBox_Click">
    </asp:button></div>
    </form>
</body>
</html>

Ahora en el evento Page_Load de la pagina agregar el atributo al cuadro de texto:

protected void Page_Load(object sender, EventArgs e)
    {
        txtTexto.Attributes.Add("onblur", this.Page.ClientScript.GetPostBackEventReference(this.btnTextBox, ""));
    }

Finalmente agregamos el código en el evento clic de nuestro botón oculto.

protected void btnTextBox_Click(object sender, EventArgs e)
    {
        //Coloque aquí su código para evento onblur
    }

"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""
Share:

Internet Explorer: Vista de Compatibilidad ASP.NET

Quiero compartir con ustedes un código que nos permite identificar mediante JavaScript la vista de compatibilidad de nuestro navegador Internet Explorer (IE) y ademas si estamos usando un navegador diferente. Lo anterior porque muchas veces los estilos de nuestros sitios no son compatibles y presentan alteraciones en la presentación de las paginas al usuario. Por lo tanto el siguiente ejemplo permite identificar en que entorno de navegador estamos y poder llegar a tomar alguna decisión al respecto:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>   
    <script type="text/javascript" language="javascript">
        function ValidarNavegador() {
            if (document.documentMode) {
                if (document.documentMode <=  7) {
                    alert("Estas en Internet Explorer con vista de compatibilidad.");
                    return;
                }
                alert("Esta es una versión de Internet Explorer sin vista de compatibilidad.");


            } else {
                alert("Esto no es Internet Explorer.");
            }
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table id="Navegador" cellpadding="0" cellspacing="0" width="100%" >
        <tr>
            <td align="center">
                Consultar Compatibilidad del Navegador&nbsp;
                <br /><br />
                <asp:Button ID="BtNavegador" runat="server" OnClientClick="return ValidarNavegador();" Text="¿Qué Navegador?" />
            </td>
        </tr>
        </table>
       
    </div>
    </form>
</body>
</html>
Al ejecutar nuestro ejemplo podemos ver la compatibilidad para cada explorador:



La siguiente imagen sin vista de compatibilidad:





Finalmente la visualización diferente a Internet Explorer:


Este ejemplo nos permite conocer la vista compatibilidad de una pagina en Internet Explorer, pero también es importante poder cambiarla, esto lo podemos realizar a través del META X-UA-Compatible.

Si tienen alguna duda o ampliar la información me cuentan, hasta pronto.
"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""


Share:

Exportar DataTable a CSV en C#

Anexo código que nos permite exportar un DataTable a un archivo plano con extensión CSV desde Visual studio C#

Para este ejemplo creamos un DataTable:

private DataTable TablaEnvioSms()
{
   DataTable dtSms = new DataTable();

   dtSms.Columns.Add("Fila", typeof(string));
   dtSms.Columns.Add("Nombres", typeof(string));
   dtSms.Columns.Add("Apellidos", typeof(string));
   dtSms.Columns.Add("Direccion", typeof(string));
   dtSms.Columns.Add("Telefono", typeof(string));
   return dtSms;
}

Este es el evento Click del boton (btnExportar) en la pagina aspx

protected void btnExportar_Click(object sender, EventArgs e)
    {
        DataTable dtSms = new DataTable();

        //Asignamos estructura del DataTable
        dtSms = TablaEnvioSms();
        DataRow newRow;

        //primera fila
        newRow = dtSms.NewRow();
        newRow["Fila"] = "1";
        newRow["Nombres"] = "Pedro Luis";
        newRow["Apellidos"] = "Ramirez Perez";
        newRow["Direccion"] = "Calle 1 No. 2 2";
        newRow["Telefono"] = "5555";
        dtSms.Rows.Add(newRow);

        //segunda fila
        newRow = dtSms.NewRow();
        newRow["Fila"] = "2";
        newRow["Nombres"] = "Maria tereza";
        newRow["Apellidos"] = "Ramirez Perez";
        newRow["Direccion"] = "Calle 1 No. 2 2";
        newRow["Telefono"] = "44444";
        dtSms.Rows.Add(newRow);
       

        //Realizamos el Llamado al metodo que exporta la estructura del DataTable.
        //Ademas recibe el nombre del archivo CSV y la ruta donde se almacenara.
        DataTableCSVFile(dtSms, "ExportarDatos.csv", "c://");

    }


Método que Exporta los datos y muestra el archivo para abrirlo.

public void DataTableCSVFile(DataTable dt,string sfilename, string strFilePath)
    {     
        StreamWriter sw = new StreamWriter(strFilePath + sfilename, false);
        int iColCount = dt.Columns.Count;

        // Escribiendo las Columnas del DataTable.
        for (int i = 0; i < iColCount; i++)
        {
            sw.Write(dt.Columns[i]);
            if (i < iColCount - 1)
            {
                sw.Write(",");
            }
        }

        sw.Write(sw.NewLine);

        // Escribiendo todas las Filas del DataTable.
        foreach (DataRow dr in dt.Rows)
        {
            for (int i = 0; i < iColCount; i++)
            {
                if (!Convert.IsDBNull(dr[i]))
                {
                    sw.Write(dr[i].ToString());
                }

                if (i < iColCount - 1)
                {
                    sw.Write(",");
                }
            }
            sw.Write(sw.NewLine);
        }
        sw.Close();

        Response.Clear();
        Response.ContentType = "application/csv";
        Response.AddHeader("Content-Disposition", "attachment; filename=" + sfilename);
        Response.WriteFile(strFilePath + sfilename);
        Response.Flush();
        Response.End();
    }

Exportar un Dataset a Excel desde c# es una funcionalidad muy interesante, los invito a consultarla.

Si tienen alguna duda o ampliar la información me cuentan, hasta pronto.
"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""


Share:

Qué es AJAX?

AJAX, anteriormente llamado "Atlas", acrónimo de Asynchronous JavaScript y XML, que simplemente, es una manera o técnica de transferir datos entre el servidor y el cliente sin necesidad de enviar toda la página, y creando así una devolución de datos completa. Esto permite obtener una mejor experiencia para el usuario, ya que carga el contenido dinámico se puede hacer en un segundo plano, sin refrescante y redibujar toda la página.

Cuando se implementa AJAX en nuestros proyectos, obtenemos aplicaciones que funcionan mucho más rápido, ya que las interfaces de usuario se pueden actualizar por partes sin tener que actualizar toda la página. Por ejemplo, al diligenciar un formulario que se captura en un sitio web, con AJAX se puede actualizar solo la parte en la que se selecciona la ciudad de residencia sin tener que actualizar toda la página web completa.
"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""


Share:

Solution for IE10 error: Sys.ArgumentOutOfRangeException: Value must be an integer asp.net

En un proyecto proyecto Asp.Net con controles AJAX (ModalPopup) en Internet Explorer 10 (IE10) se me presento la siguiente inconsistencia "Solution for IE10 error: Sys.ArgumentOutOfRangeException: Value must be an integer asp.net", la solución que se encontró es agregar la siguiente linea, ya sea en la Master.page del proyecto o en el encabezado de mi pagina .aspx.

<meta http-equiv="X-UA-Compatible" content="IE=9" />

La etiqueta meta X-UA-Compatible permite elegir qué versión de Internet Explorer la página se debe representar. Es utilizado por Internet Explorer 8 para especificar si una página se debe representar como IE 7 (vista de compatibilidad) o IE 8 (normas vista).

Las opciones que tiene para el contenido (content) son:
  • "IE=5" 
  • "IE=EmulateIE7" 
  • "IE=7" 
  • "IE=EmulateIE8" 
  • "IE=8" 
  • "IE=EmulateIE9" 
  • "IE=9" 
  • "IE=edge"

Se utiliza la etiqueta meta X-UA-Compatible en las páginas web donde se sospecha que Internet Explorer 10 intentará representar la página en una forma incorrecta.  Una forma de conocer bajo que modo de compatibilidad se ejecuta una pagina aspx en asp.net puede ayudarlos a solucionar muchos inconvenientes.
"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""

Share: