On Friday 02 December 2005 23:11, Carlos Lorenzo Matés wrote:
Gracias, ya lo logre, tenia el problema que el ps generado no empezaba por !% y el sendfax no lo reconocia como postscript, finalmente modifique el script para que lo convirtiera en pdf y asi ya me funciona.
ahora el problema es que el script que convierte el ps a ascii para buscar el numero, solo permite un fax por documento, y necesito poder imprimir en un solo documento varios faxes, en la herramienta que usabamos actualmente se marcaba el principio y el fin de cad fax con unos tags y el programa lo partia correctamente. Quiero poder hacer algo parecido, y se me ha ocurrido el usar en conjunto las siguientes herramientas:
ps2pdf para convertir el ps a pdf pdftk para partir el pdf en n ficheros (uno por pagina) ps2ascii para escanear cada pagina por separado
marcamos el principio de cada Fax con [[BeginHylaFax=NumeroDestino]] y el Fin con [[EndHylaFax]]
como solo podemos partir por paginas completas lo que marcamos es la pagina inicial y la final, da lo mismo en que lugar de la pagina se encuentre el tag.
y necesito hacer un script que para un fichero ps haga lo siguiente:
1. convierta el ps a pdf 2. lo parta en un fichero por pagina 3. haga un bucle por el total de paginas y para cada pagina leida aplique la siguiente logica: Primera Pagina = 0 Ultima PAgina = 0 Numero Destino = 0 Hoja Actual = 0 Recorre Hojas Mientras Hoja Actual < Total Hojas { Si Primera Pagina = 0 Busco la cadena [[BeginHylaFax= NumeroDestino]] Si encontrada Primera Pagina = Hoja Actual Numero Destino = NumeroDestino // por si el fax es de una sola hoja busco la cadena de fin Busco la Cadena [[EndHylaFax]] si encontrada sendfax Primera Pagina Numero Destino Primera Pagina = 0 Numero Destino = 0 pasa a la Siguiente Hoja Si no Encontrada pasa a Siguiente Hoja
Si Primera Pagina <> 0 Busco la cadena [[EndHylaFax]] si encontrada Ultima Pagina = Hoja Actual genero un pdf uniendo todas las hojas desde Primera Pagina a Ultima Pagina con pdftk sendfax nuevopdf Numero Destino Primera Pagina = 0 Ultima Pagina = 0 Numero Destino = 0 pasa a la siguiente hoja Si no encontrada pasa a la Siguiente Hoja }
como veis la logica no es dificil, pero no controlo mucho de bash, lo que nunca hice fue contar los ficheros de un directorio (donde generariamos las hojas), e iterar por todas ellas
por el resto creo que no tendria problemas
si alguien me hecha una mano para hacer esto :-D se lo agradeceria
Muchas Gracias
No era deficil hacer. Pero no tengo las routinas mas.
Jerry
Comentarios: 1) man Sendfax: sendfax [options] [files...] "sendfax submits one or more facsimile transmission requests to a HylaFAX facsimile server. " Parece que no es necesario juntar las paginas, saber si hylafax las manda en una o varias llamadas... 2) Yo lo haria en perl ó python, y no en bash. Pero talves es por que las conosco, y bash no. Ademas utilizo komodo (www.activestate.com) que es una heramienta de programacíon moderna (con breakpoint, variable inspection, syntax coloring, etc). Sin heramientas no es juego! (activestate oferece una version gratis pero solo para programar opensource. Este script será opensource ó no?) 3) No tendras problemas al utlisar un directorio como contenedor de tus archivos? Que pasará si te mandan otro fax antes de que termines con la primera? 4) Si fuese mi projecto, yo utilizaria algo haci: la llamada: myfaxsend nombre.ps y la logica: # # Reparte Paginas # crea directorio /unlugarunico/nombre convierta nombre.ps en /unlugarunico/nombre/nombre.pdf haga paginas nombre_1.pdf á nombre_x.pdf haga paginas nombre_1.txt á nombre_x.txt # # Investigation de los faxes # faxes={}; NoFax = 0; foreach NoPagina (1..x) { if /[[BeginHylaFax= (d+)]]/ # Aqui comiensa un fax. { NoTel = $1; # el numero ! NoFax = NoFax+1; faxes{NoFax} = {}; faxes{NoFax}{Numero} = NoTel; faxes{NoFax}{PrimeraPagina} = NoPagina; }; if /[[EndHylaFax]]/ # aqui termina un fax. { faxes{NoFax}{UltimaPagina} = NoPagina; }; }; # # Verificacion # foreach faxno (faxes.keys()) { # saber que habra que hacer. fax = faxes{faxno}; fax{ok}=true; if (!exists(fax{PrimeraPagina}) { fax{ok}=false; fax{error}='No hay Primera Pagina' } if (!exists(fax{UltimaPagina}) { fax{UltimaPagina}=faxes{faxno+1}{PrimeraPagina} - 1; } if (fax{Numero}[0] == '+' || fax{Numero}[0]) { fax{ok}=false; fax{error}='Numero de distancia Larga' } ...etc... }; # # Mandelos # foreach faxno (faxes.keys()) { fax = faxes{faxno}; if (fax{ok}) { paginas = ''; for (paginano=fax{PrimeraPagina};paginano<=fax{UltimaPagina};paginano++) { paginas = paginas . " /unlugarunico/nombre/nombre_$paginano.pdf"; } $cmd = "sendfax -d $fax{Numero} "; $cmd = $cmd . "$paginas > /unlugarunico/nombre/fax_$faxno.log"; system($cmd); } else { print "$faxno fax (en pagina $fax{PrimeraPagina}) tuvo error $fax{error}"; } } Desculpeme que te mande un ejemplo tan largo... Pero queria mostrar que con heramientas apropiadas... y lenguajes (mas) modernas se puede utilizar logicas mas poderosas! Con algo haci, es facil de añadir mas optiones, functiones, e verificationes! Como ejemplo, mas que un numero ala ves, ó nombres de clientes que traduces a numeros, etc... Hojala te ayudo... Jerry