He hecho una pequeña aplicación que, utilizando GhostScript, convierte un archivo PDF en imágenes JPG. De momento, al ejecutar el programa pide que selecciones un archivo PDF, abriendo un cuadro de diálogo.
Con una herramienta como FileTypeMan de Nirsoft he creado una opción en el menú contextual del explorador de Windows que al seleccionar un archivo .pdf ejecuta mi aplicación.
Ahora lo que necesito es que mi programa sepa que debe realizar la conversión de "ese archivo PDF" a JPG. En lugar de seleccionar con el cuadro de diálogo de archivos, debe hacer la conversión sobre el archivo PDF seleccionado.
¿Sabéis cómo puedo indicar a mi programa que ejecute la conversión en ese archivo desde el que se ha llamado con el menú contextual?
Como siempre, gracias
EDITADO: Me contesto a mí mismo
He visto en la ayuda, apartado Command Line Parameters de Running Scripts, que se puede utilizar $CmdLine[x] precisamente para esto.
En mi caso, he utilizado $CmdLine[1], que es el primer (y único parámetro) que se envía desde el menú contextual.
¡Otra cosa que he aprendido hoy!
Por cierto, el código, por si a alguien le interesa (es sencillo y rápido, y seguramente se puede limpiar/ordenar). Se necesita GhostScript para utilizarlo:
NUEVA EDICIÓN 02/06/2011: Se ha añadido la condición if $CmdLine[0]=0 para cuando se ejecute el programa directamente, sin parámetros.
Código: Seleccionar todo
#include <Array.au3>
#include <file.au3>
$CarpetaGhostScript="C:\Archivos de programa\gs\gs9.02\bin\GSWin32c" ;<-------------------- Ubicación de GhostScript
Global $CarpetaArchivos
if $CMDLINE[0]=0 Then ; Si se ejecuta el prgorama directamente
$CarpetaArchivos=Selecciona_Archivo() ; Si se desea seleccionar archivo
$PrimeraPagina=InputBox("Primera Página","Introduzca la primera página")
$UltimaPagina=InputBox("Última Página","Introduzca la última página")
Else
if $CMDLINE[1]<>"" Then
$CarpetaArchivos=$CMDLINE[1] ; Si se ejecuta desde el menú contextual del explorador de windows
$PrimeraPagina="" ; se convierte a JPG todas las páginas del PDF
$UltimaPagina=""
EndIf
EndIf
Dim $szDrive, $szDir, $szFName, $szExt
$cadenacarpetaseparada= _PathSplit($CarpetaArchivos, $szDrive, $szDir, $szFName, $szExt)
;_ArrayDisplay($cadenacarpetaseparada,"Matriz $cadenacarpetaseparada")
$tamanomatriz_cadenacarpetaseparada=UBound($cadenacarpetaseparada)-2 ; Tamaño máximo de la matriz -2 porque es donde está el nombre de la carpeta
$CarpetaOrigen=$szDrive& $szDir
$ArchivoOrigen=$szDrive& $szDir& $szFName& $szExt
$ArchivoSalida=$szDrive& $szDir& $szFName&"_%03d.jpg"
ConsoleWrite($CarpetaOrigen & @CRLF)
ConsoleWrite($ArchivoOrigen & @CRLF)
ConsoleWrite($ArchivoSalida & @CRLF)
$cadena='"'& $CarpetaGhostScript & '"'
if $PrimeraPagina<>"" then $cadena=$cadena & ' -dFirstPage=' & $PrimeraPagina
if $UltimaPagina<>"" then $cadena=$cadena & ' -dLastPage=' & $UltimaPagina
$cadena=$cadena & ' -sDEVICE=jpeg -dJPEGQ=85 -r150 -sOutputFile="' & $ArchivoSalida & '" -dNOPAUSE "' & $ArchivoOrigen & '" -c quit'
ConsoleWrite($cadena)
run($cadena)
Func Selecciona_Archivo() ; ----- Selecciona archivo PDF para modificar -----
Global $ArchivoOrigen_T
$ArchivoOrigen_T=FileOpenDialog("Seleccione archivo","C:\Documents and Settings\Usuario\Mis documentos\","(*.pdf)",1)
return $ArchivoOrigen_T
EndFunc