*-17jun2021 zarlu@hotmail.com *-unir_pdftk.prg *-Une de 2 hasta 5 pdf con pdftk.exe *-Descargar pdftk.exe *-Link pdftk https://www.pdflabs.com/tools/pdftk-server/ *-En carpeta de la aplicación copiar los archivos "pdftk.exe" y "libiconv2.dll" *-26jun2021 *-Se incluyo en el .bat el path de pdftk.exe. Es el directorio de ejecución *-Corregido terminar rutina sino selecciona pdf y desea cancelar *-Mensaje en WAIT mientras se ejecura rutina *-23sep2022 aumenté a 6 archivos a unir *-05oct2022 Aumenté a 15 archivos a unir. Leyenda en el getfile para saber número de archivo que se selecciona. CLEAR *-path pdftk lcPdtk=LEFT(sys(16,1),RAT("\",sys(16,1))-1)+"\pdftk" *-numero de pdfs a unir DO WHILE .T. lcGetNum=INPUTBOX("Capture un número entre 2 y 15","Número de PDFs a unir","0",0,"XXX","XXX") DO Case Case lcGetNum=="XXX" EXIT Case VAL(lcGetNum)<2 OR VAL(lcGetNum)>15 MESSAGEBOX("Capturé un número entre 2 y 15",0,"Verifique") OTHERWISE EXIT ENDCASE ENDDO *-rutina cancelada IF lcGetNum=="XXX" RETURN ENDIF **matriz numero de pdfs lcGetNum=VAL(lcGetNum) DIMENSION lcPDF(lcGetNum) *-captura pdfs lcExit="" FOR a=1 TO lcGetNum lcPDF(a)=GETFILE("pdf","PDF "+ALLTRIM(STR(A))+":","Seleccionar",0,"Seleccione archivo PDF "+ALLTRIM(STR(A))) IF Lower(JUSTEXT(lcPDF(a)))<>"pdf" IF MESSAGEBOX("Archivo no válido. Desea continuar?",4+0+256,"Confirme")=7 lcExit="XXX" EXIT ELSE a=a-1 ENDIF ENDIF EndFor *-rutina cancelada IF lcExit=="XXX" RETURN ENDIF *directorio salida lcOut="" DO WHILE .t. lcOut=PUTFILE("Salida:","pdfunidos","pdf") *? lcOut DO Case Case EMPTY(lcOut) IF MESSAGEBOX("No seleccionó directorio de salida!!. Desea continuar?",4+0+256,"Confirme")=7 EXIT ENDIF CASE OCCURS(".",lcOut)>1 MESSAGEBOX("Nombre de salida o extensión no válido!!",0,"Aviso") CASE Empty(JUSTEXT(lcOut)) lcOut=lcOut+"pdf" Exit CASE Lower(JUSTEXT(lcOut))<>"pdf" MESSAGEBOX("Nombre de sálida no válido!!",0,"Aviso") OTHERWISE Exit ENDCASE *? lcOut ENDDO *-sin salida cancela rutina IF EMPTY(lcOut) RETURN EndIf *-confirma rutina IF MESSAGEBOX("Desea unir PDFs?",4+0+256,"Confirme")=7 RETURN ENDIF *-mensaje WAIT " - - - Uniendo sus PDFs. Espere por favor..... - - - " Windows Nowait *-crea cadena a ejecutar lcDos="" lcCat="" FOR a=1 TO lcGetNum lcPDF(a)=GETWORDNUM("A,B,C,D,E,F,G,H,I,J,K,L,M,N,O",a,",")+[="]+lcPDF(a)+["] lcDos=lcDos+" "+lcPDF(a) lcCat=lcCat+" "+GETWORDNUM("A,B,C,D,E,F,G,H,I,J,K,L,M,N,O",a,",") EndFor *-cadena cmd *lcRun1=["]+lcPdtk+["]+" "+ lcDos+" "+"cat"+" "+lcCat+" "+"output"+[ "]+lcOut+["] TEXT TO lcRun TEXTMERGE NoShow "<>" <> cat <> output "<>" ENDTEXT *-ejecuta pdftk mWShell(lcRun) *-limpia mensaje WAIT Clear *-validacion final oFSO=CreateObject('Scripting.FileSystemObject') If oFSO.FileExists(lcOut) MESSAGEBOX("Se generó el archivo:"+Chr(13)+lcOut,0,"Aviso") ELSE MESSAGEBOX("Error!! No se generó el archivo.",0,"Aviso") ENDIF RELEASE ALL *-Fin *--------------------------------- *-ejecuta WScript.Shell FUNCTION mWShell(lcCmd)&&rutina del dos a ejecutar LOCAL loShell AS WScript.Shell loShell = CREATEOBJECT("WScript.Shell") lcArchivo = GetEnv("TEMP") + "" + Sys(2015) + ".bat" StrToFile(lcCmd, lcArchivo) loShell.Run(lcArchivo, 0, 3) RELEASE loShell DELETE FILE lcArchivo ENDFUNC