lunes, 9 de abril de 2012

Lenguaje: Pascal ( Delphi 7)
Este es un procedimiento que muestra la forma en la que se llama precisamente un procedimiento almacenado en MySQL 5 y se invoca sin los componentes habituales para aprovechar una conexión ADO
(Nota: utilice un DataModule, con un componente de conexion en ADO pero tambien se puede naturalmente realizar al vuelo)




procedure tprincipal.actualiza_importe_impuestos(oficina:string);
var sqlBorrar,sqlInsertarImporte,conexion,c:string;
borrar:TADOQuery;
begin
c:='''';
sqlInsertarImpo:=' CALL basededatos.Genera_Impuestos("'+oficina+'",sysdate()); ';

CONEXION := 'Provider=MSDASQL.1;Extended Properties="DRIVER={MySQL ODBC 5.1 Driver};DESC=;DATABASE=basededatos;SERVER=localhost;UID=elusuario;PASSWORD=tupassword;PORT=;SOCKET=;OPTION=16427;STMT=;"';
dm.adocon.connected:=false;
 dm.adocon.connectionString:=CONEXION;
 dm.adocon.connected:=true;

Borrar:= TADOQuery.Create(nil);
   Borrar.Connection:=dm.adocon;
      Borrar.SQL.Text := sqlInsertarImpo;
      Borrar.execSQL;
      Borrar.Close;
      Borrar.Free;
dm.adocon.connected:=false;

/* Despues de esto hago mas cosas que no publique :P*/

end;



Lenguaje: Action Script 2.0 ( Flash)
Ejemplo: Clase "Estadístico", esta clase es un pequeño ejemplo
para guardar una serie de datos y determinar algunos calculos 
como el valor mayor, el menor, los porcentajes etc.
 ( Nota: AS2, es muy parecido a C++ :P vdd?)


class Estadistico  {
                private var Valores:Array;
                private var Media:Number;
                private var ValorMayor:Number;
                private var ValorMenor:Number;
                private var Moda:Number;
                private var Porcentajes:Array;
                private var PorcentajeMayor:Number;
                private var PorcentajeMenor:Number;
                public static var SumaTotal:Number;
                public function Estadistico(valores:Array) {
                               Valores = valores;
                               SumaTotal=0;
                               PorcentajeMayor=0;
                               PorcentajeMenor=0;
                               Calculos();
                }
                private function Calculos():Void {
                               var i:Number;
                               var Porcentaje:Number;
                               SumaTotal = SumaValores();
                               //trace("ST:"+String(SumaTotal));
                               Porcentaje = 0;
                               PorcentajeMayor = 0;
                               PorcentajeMenor = Valores[0];
                               ValorMayor = Valores[0];
                               ValorMenor = Valores[0];
                               for (i=0; i<Valores.length; i++) {
                                               //trace(i+":"+Valores[i]);

                                               Porcentaje = (Valores[i]/SumaTotal)*100;
                                               Porcentajes[i] = Porcentaje;
                                               //trace("Por:"+Porcentaje);
                                               if (Porcentaje>PorcentajeMayor) {
                                                               PorcentajeMayor = Porcentaje;
                                               }
                                               if (Porcentaje<PorcentajeMenor) {
                                                               PorcentajeMenor = Porcentaje;
                                               }
                                               //Valores[i] = 0;
                                               if (Valores[i]>ValorMayor) {
                                                               ValorMayor = Valores[i];
                                               }
                                               if (Valores[i]<ValorMenor) {
                                                               ValorMenor = Valores[i];
                                               }
                                              
                               }
                }
                private function SumaValores():Number {
                               var i:Number;
                               for (i=0; i<Valores.length; i++) {
                                               SumaTotal += Valores[i];
                               }
                               return SumaTotal;
                }
                public function PMayor():Number {
                               return PorcentajeMayor;
                }
                public function ValMayor():Number {
                               return ValorMayor;
                }
                               public function ValMenor():Number {
                               return ValorMenor;
                }
                public function PMayorTrunc():Number {
                               return int(PorcentajeMayor*100)/100;
                              
                }
                public function PMenor():Number {
                               return PorcentajeMenor;
                }
                public function STotal():Number {
                               return SumaTotal;
                }
}

jueves, 5 de abril de 2012

Función que recibe una imagen y modifica las propiedades, escala de grises, resolución, calidad, etc y retorna como un arreglo de Bytes

Es común que al momento de trabajar con imágenes necesitemos realizar un ajuste de calidad, la resolución o escala de grises, respecto a este problema aqui tenemos una funcion que diseñe algunos años con varios bloques comentados segun la necesidad de cada quien, en su momento utilice cada uno de estos bloques y los fui comentando solamente :P


    Public Shared Function BmpToBytes_MemStream(ByVal img As Image) As Byte()
        'Esta configuracion reduce el tamaño en mas de un 70% del PDF
        '----------------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.Default

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias

        'MOD:2 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un 60%
        '-----------------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.Default

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality


        'MOD:3 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un 55%
        '-------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.Half

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        'MOD:4 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un 55%
        '--------------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        'MOD:5 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un ?%
        '-------------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format64bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality


        'MOD:6 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un ?%
        '---------------------------------------------------------------------------------------
        'Dim imagen As New Bitmap(950, 1300, System.Drawing.Imaging.PixelFormat.Format64bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        'MOD:7 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un ?%
        '---------------------------------------------------------------
        'ESTA ES LA IDEAL
        Dim imagen As New Bitmap(1024, 1402, System.Drawing.Imaging.PixelFormat.Format64bppPArgb)
        Dim new_g As Graphics = Graphics.FromImage(imagen)

        new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear
        new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        'MOD:8 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un ?%
        '----------------------------------------------------------
        'Dim imagen As New Bitmap(1600, 2190, System.Drawing.Imaging.PixelFormat.Format64bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        new_g.DrawImage(img, 0, 0, imagen.Width, imagen.Height)
        img = imagen

        Dim sTemp1 As String

        sTemp1 = System.IO.Path.GetTempFileName()
        System.IO.File.Delete(Path.GetTempFileName())

        Dim fs As New FileStream(sTemp1, FileMode.OpenOrCreate)

        img.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg)

        fs.Position = 0

        Dim imgLength As Integer = CInt(fs.Length)
        Dim bytes(0 To imgLength - 1) As Byte
        fs.Read(bytes, 0, imgLength)

        fs.Close()
        'Eliminar el archivo temporal para no saturar el disco duro
        System.IO.File.Delete(Path.GetTempFileName())
        Return bytes
    End Function

miércoles, 4 de abril de 2012

Función para iTextSharp en VB.net que recibe un DataSet y retorna una Tabla en cierta coordenada X Y

Esta es una funcion muy sencilla para mandar imprimir a traves de coordenadas cartesianas una matriz de datos de un DataSet,

Paso 1.

Verificar que nuestra dll ( libreria de iTextSharp) se encuentra en el directorio del proyecto








Paso 2.

Ingresar las librerias del iTextSharp como se indica
Imports iTextSharp.text
Imports iTextSharp.text.pdf

Paso 3

Esta es la funcion y su llamado
Sub agregar_tablaPDF_XY(ByRef datos As DataTable, ByVal x As Integer, ByVal y As Integer, ByVal cb As PdfContentByte, ByVal BF_Times As BaseFont, ByVal Espx As Int32, ByVal Espy As Int32)
        Dim nc, nf, nfila As Integer
        Dim indX As Int32 = x
        Dim indY As Int32 = y
        Dim posx As Int32 = x
        Dim posy As Int32 = y


        For nf = 0 To datos.Rows.Count
            indX = x
            For nc = 0 To datos.Columns.Count - 1
                If nf = 0 Then

             coloca_textoxy(datos.Columns(nc).ColumnName, cb, BF_Times, indX, indY)
                Else
                    nfila = nf - 1
            coloca_textoxy(datos(nfila)(nc).ToString(), cb, BF_Times, indX, indY)
                End If
                indX += Espx
            Next
            indY -= Espy
        Next
     End Sub

Sub coloca_textoxy(ByVal valor As String, ByVal cb As PdfContentByte, ByVal BF_Times As BaseFont, ByVal x As Int32, ByVal y As Int32)
cb.BeginText()
cb.SetFontAndSize(BF_Times, 8)   
cb.SetTextMatrix(x, y)        cb.ShowText(valor)        cb.EndText()
End Sub 

Esta es la forma en la que se manda llamar la funcion
agregar_tablaPDF_XY(dsDetalle, 80, 610, cb, BF_Times, 50, 12)

Es un ejemplo muy sencillo, pero practico
un saludo