jueves, 19 de julio de 2007 23:15
por
jorgedieguez
Automatizar AdobeAcrobat
Recientemente mi cliente me pidió ayuda para automatizar una serie de tareas con documentos PDF.
Por ejemplo se necesitaba combinar una serie de documentos PDF en un único fichero PDF.
Para trabajar con los documentos disponía de Adobe Acrobat Profesional.
Al disponer de la herramienta de Adobe pensé que podría resolver el problema utilizando el lenguaje scripting que incorpora.
Se trata de JavaScript con un API muy completo para acceder a los elementos del documento y acciones de la aplicación Adobe Acrobat. Se puede hacer de todoJ hasta invocar WebServives mediante SOAP(no llego a imaginarme como se podría emplear esta posibilidad).
Para buscar información y ejemplos sobre JavaScript de Acrobat me sirvió de gran ayuda el site Acrobat Developer Center:
Para comenzar, busque la forma de añadir un nuevo menú al interface de Adobe Acrobat para invocar el proceso automatizado.
Para ello se coloque un fichero .js con el nuevo código en la carpeta:
C:\Program Files\Adobe\Acrobat 6.0\Acrobat\Javascripts
En mi caso coloque el fichero custom.js con el siguiente contenido:
//Añadir menu CUSTOM al menu FILE
app.addSubMenu({ cName: "Custom", cParent: "File", nPos: 0 })app.addMenuItem({ cName: "Combinar Ficheros", cParent: "Custom", cExec: "CombinarFicheros()"});
Como resultado al ejecutar la aplicación Adobe Acrobat aparecerá el nuevo submenú en el menú Archivo.
Ahora, después de un tiempo revisando los documentos del Developer Center añadí la función que combina documentos .pdf en un único documento pdf y además colocar en todas las páginas del nuevo documento el pie con numeración de las paginas.
A continuacion el fragmento de codigo:
function CombinarFicheros()
{
//lista de ficheros
var aPage=new Array("portada.pdf","01.pdf","02.pdf","03.pdf")
//carpeta donde estan los ficheros
var sMainFolder="/c/man_out/"
var oDoc = app.newDoc();
for (c=0; c < aPage.length; c++)
{
oDoc.insertPages
({
nPage: oDoc.numPages-1,
cPath: sMainFolder+aPage [ c ],
});
}
oDoc.deletePages({nStart: 0, nEnd: 0});
//Ponemos pie de pagina
var sNumPages=oDoc.numPages;
for (var p = 2; p < sNumPages; p++)
{
//calculamos la posicion del pie en funcion de las dimensiones de la pagina
var inch = 72;
var aRect=new Array()
var aPRect = oDoc.getPageBox( {nPage: nPageIndex} );
aRect[0] = aPRect[0]+ .5*inch;
aRect[1] = aPRect[3]+.5*inch;
aRect[2] = 580//numero
aRect[3] = 5
//cramos etiqueta de texto
var f = oDoc.addField(sFieldName, "text", nPageIndex, aRect )
f.readonly= true;
f.alignment = "left";
f.multiline = true;
f.textColor = color.black;
f.textFont = font.Helv;
f.textSize = 12;
f.value = "Página " + (p+1) + " de " + sNumPages;//Texto del pie
}
oDoc.saveAs("/c/man_out/manual.pdf");
}