' Gambas class file Public Sub BotonSALIR_Click() Me.Close End Public Sub botonSeleccionarPDF_Click() botonSeleccionarPDF.Tag = "" ' Mi zona temporal... frmSeleccionarPDF.Load frmSeleccionarPDF.ShowModal End Public Function AnimacionEscalado() Dim i As Integer Dim anchoMin As Integer Dim altoMin As Integer altoMin = BotonCOMPRIMIR.Height + BotonCOMPRIMIR.Y + 12 anchoMin = BotonCOMPRIMIR.Width + BotonCOMPRIMIR.X + 10 ' Valor "encogido" Dim anchoEncogido As Integer Dim altoEncogido As Integer altoEncogido = botonSeleccionarPDF.Height + botonSeleccionarPDF.Y + 10 anchoEncogido = botonSeleccionarPDF.Width + botonSeleccionarPDF.X + 10 Me.Width = anchoEncogido Me.Height = altoEncogido Me.Refresh Wait 0.2 Me.Refresh ' Valor "estirado" For i = altoEncogido To altoMin Step 30 If i >= altoMin Then Break Me.Height = i Me.Refresh Wait 0.1 Me.Refresh Next ' Forzamos al final al alto y ancho minimo Me.Width = anchoMin Me.Height = altoMin Me.Refresh Me.Resizable = False End Public Function ChequearHerramientas() ' Usamos como herramienta externa Ghostscript (GS) ' Si no está hay que avisar para que la instale Dim estaOK As String ' GHOSTSCRIPT Shell "gs --version 1>/dev/null 2>/dev/null;echo -n $?" To estaOK ' 0 => Esta instalado If estaOK <> "0" Message.Title = ("Chequeo de Herramientas") Message.Error("No se ha localizado la herramienta Ghostscript (gs)" & gb.CrLf & "Debe instalarla para poder usar este programa") BotonCOMPRIMIR.Enabled = False Else BotonCOMPRIMIR.Enabled = True Endif ' GRAPHICS MAGICK Shell "gm version 1>/dev/null 2>/dev/null;echo -n $?" To estaOK If estaOK <> "0" Message.Title = ("Chequeo de Herramientas") Message.Error("No se ha localizado la herramienta Graphics Magick (gm)" & gb.CrLf & "Debe instalarla para la compresión máxima") RPdfMaxima.Enabled = False Else RPdfMaxima.Enabled = True Endif End Public Sub form_Show() AnimacionEscalado() ChequearHerramientas() End Public Sub BotonCOMPRIMIR_Click() If botonSeleccionarPDF.Tag = "" 'No hay fichero seleccionado Message.Title = ("Error - Fichero PDF") Message.Error("Debe de seleccionar un fichero PDF") Return Else 'Tenemos fichero Dim FichSalida As String Dim trozo As String[] trozo = Split(botonSeleccionarPDF.Tag, "/") Dim i As Integer For i = 0 To trozo.Max - 1 FichSalida &= trozo[i] & "/" Next FichSalida &= ("PDF_Comprimido-") & trozo[trozo.Max] If Exist(FichSalida) ' Si existe borramos el anterior Kill FichSalida Endif Procesando.Visible = True Procesando.Show Procesando.Start Procesando.Refresh Wait 0.1 Procesando.Refresh '' LANZAMOS EL COMANDO DE COMPRIMIR PDF SEGUN EL RadioButton seleccionado Dim Comando As String Comando = GeneraCMD(botonSeleccionarPDF.Tag, FichSalida) 'Message("Voy a ejecutar:" & gb.CrLf & Comando) Shell Comando Wait ' Esperamos a que termine ' Al terminar ocultamos siempre el "Spinner" Procesando.Stop Procesando.Visible = False Procesando.Hide Message.Title = ("Compresión Finalizada") Message("Se ha comprimido el fichero PDF indicado" & gb.CrLf & "lo puede encontrar en:" & gb.CrLf & FichSalida) Endif End Public Function GeneraCMD(FichEntrada As String, FichSalida As String) As String Dim ComandoSalida As String Dim pdfTipo As String If RPdfMaxima.Value ' Usamos GM ComandoSalida = "gm convert -density 150 -resize 800 " ComandoSalida &= Shell$(FichEntrada) & " " & Shell$(FichSalida) Else ' Usamos GS If RPdfEbook.Value Then pdfTipo = "/ebook" If RPdfImprimir.Value Then pdfTipo = "/printer" If RPdfPantalla.Value Then pdfTipo = "/screen" If RPdfDefecto.Value Then pdfTipo = "/default" ComandoSalida = "gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=" & pdfTipo & " -dNOPAUSE -dQUIET -dBATCH -sOutputFile=" 'ComandoSalida = "gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=" ComandoSalida &= Shell$(FichSalida) & " " & Shell$(FichEntrada) Endif If RPdfImagenes.Value ' Para los PDFs que son imagenes usamos graphics magic en vez de ghostscript 'gm convert -density 150 -resize 800 $ORIGEN $DESTINO ComandoSalida = "gm convert -density 150 -resize 800 " & Shell$(FichEntrada) & " " & Shell$(FichSalida) Endif 'Devolvemos lo que hay que lanzar Return ComandoSalida End Public Sub Form_Open() LabelVERSION.Text = ("Versión: ") & Application.Version System.Shell = "/bin/bash" End