Webindex

Agosto 16, 2006

Como crear un pdf desde MS-Word III: conversión masiva

Archivado en: Herramientas — gespinos @ 1:45 am

En esta ocasión veremos un procedimiento más avanzado, en el caso que se necesite convertir masivamente una gran cantidad de archivos word a PDF de forma automática. Como siempre, empezaremos por el camino ‘a pie’, para conocer a fondo el proceso de conversión, por medio de un script de VisualBasic.

El proceso consiste en realizar los mismos pasos presentados en el post Como crear un PDF desde MS-Word I, pero de forma automatizada desde la línea de comandos.

  1. Imprimir el archivo de Word utilizando una impresora PostScript. Este paso lo automatizamos por medio de un script de VisualBasic (VBScript), word2ps.vbs.
  2. Convertir el archivo postscript en PDF. Este paso lo automatizamos con un comando de GhostScript, ps2pdf.
  3. Repetimos los pasos 1 y 2 por cada archivo word, en un archivo batch.

[Muy] Breve introducción a VBScript

VBScript es un lenguaje desarrollado por Microsoft para automatizar algunas operaciones administrativas en Windows. Es un lenguaje interpretado, por lo cual necesita
un ambiente que ejecute las instrucciones. En nuestro caso, utilizaremos el ambiente Windows Script Host para ejecutar nuestro script.

Archivo de VBScript word2ps.vbs

Este script realiza lo siguiente: recibe desde la línea de comandos un nombre del documento DOC; abre el programa de Word; abre el documento; selecciona la impresora PostScript; manda a imprimir el documento a un archivo PS; cierra el documento; cierra Word.

Los archivos vbs deben de tener un tipo asociado de VBScript Script File, asociada a la aplicación Microsoft (r) Windows Based Script Host (ver referencias).

Nombre de archivo: word2ps.vbs

‘————————————————————————
‘ word2ps.vbs – Script para Convertir un Archivo de Word a Postscript
‘ (Primer Paso para convertirlo a PDF)
‘ USO:
‘ — start word2ps.vbs archivoword.doc
‘ Requiere:
‘ — interprete de VBScript como el Windows Script Host (WSH)
‘ — Utilizamos una impresora Postscript definida previamente
‘ Ej. Apple LaserWriter y la damos de alta con el nombre
‘ “ArchivoPS” y la ponemos como impresora Activa default
‘———————————————————————-
‘ Para obtener información del directorio y paths
Dim fso ‘ As FileSystemObject
Set fso = CreateObject(“Scripting.FileSystemObject”)
sDocFile = fso.GetAbsolutePathName(WScript.Arguments.Item(0))
sFolder = fso.GetParentFolderName(sDocFile)
sBase=fso.GetBaseName(sDocFile)
sPrintName=”ArchivoPS”

‘Nombre del archivo Postscript de salida
sPRNFile = sFolder + “\” + sBase + “.ps”

‘Abrimos Word
Set WordApp = CreateObject(“Word.Application”)

‘Seleccionamos la impresora Postscript
WordApp.ActivePrinter = sPrintName

‘Abrimos el archivo
WordApp.Documents.Open(sDocFile)

‘Mandamos a imprimir a un archivo
WordApp.ActiveDocument.PrintOut False , , , sPRNFile , , , , , , ,True

Do While WordApp.BackgroundPrintingStatus > 0
‘Esperar a que se termine de imprimir (no jala bien para archivos muy grandes…)
DOEVENTS()
Loop

‘Cerramos el archivo
WordApp.ActiveDocument.Close False
‘Cerramos Word
‘TODO: modificar para pasar una lista de 1+ archivos en la linea de comandos
‘ como argumentos, para evitar abrir y cerrar word por cada archivo
‘TODO2: también se podría generar automaticamente este script, por medio de sed o awk
‘ de tal forma que los archivos ya vayan hardwired al codigo y se abran
‘ multiples documentos word dentro del script
WordApp.Quit False

Set WordApp = Nothing

Para ejecutar este escript, desde una ventana de línea de comandos MS-DOS:

start word2ps.vbs midocumento.doc
ó
cscript word2ps.vbs midocumento.doc

la salida de éste script es un archivo PostScript llamado midocumento.ps

Crear el PDF a partir del archivo PostScript con ps2pdf

Posteriormente, se convierte el archivo PostScript a PDF por medio de la utilería ps2pdf, incluida en el paquete GhostScript, ver el post Como crear un PDF desde MS-Word I. (Asegurarse que el path incluya la ruta a ésta utilería, sino es así, pueden darse errores de “command not found”)


E:\scripts>ps2pdf horarios.ps horarios.pdf
"ps2pdf" no se reconoce como un comando interno o externo, programa o archivo por lotes ejecutable.

En este caso, hay que agregar las siguientes rutas en la variable de ambiente PATH (Panel de Control->Sistema->Opciones Avanzadas->Variables de Entorno)

D:\gs\gs8.53\bin
y
D:\gs\gs8.53\lib
que es la ruta de instalación de GhostScript, tanto de los archivos binarios, como de las utilerías.

E:\scripts>ps2pdf midocumento.ps midocumento.pdf
%%[ ProductName: AFPL Ghostscript ]%%
%%[Page: 1]%%
%%[Page: 2]%%
%%[LastPage]%%

y el resultado es un documento PDF llamado midocumento.pdf

Integrando todo el proceso en un archivo de procesamiento por lotes “Batch”

Nombre de archivo: convierte.bat

start word2ps.vbs midocumento1.doc
ps2pdf midocumento1.ps midocumento1.pdf
start word2ps.vbs midocumento2.doc
ps2pdf midocumento2.ps midocumento2.pdf
start word2ps.vbs midocumento3.doc
ps2pdf midocumento3.ps midocumento3.pdf
# ……… ETC, se repite el proceso para cada documento DOC

En un ambiente de producción, el archivo convierte.bat se puede generar dinámicamente a partir de un listado de archivos, por medio de utilerías de shell, por ejemplo: sed, gawk, etc

Descargas

Referencias

Sin Comentarios »

Aún no hay comentarios.

Suscripción RSS a los comentarios de esta entrada. TrackBack URL

Dejar un comentario

Gestionado con WordPress. Traducción de TodoWordPress.