Buenas, estoy llevando a cabo una aplicación que genera un archivo xls. El archivo es cargado con datos a medida que el usuario los ingresa por teclado.
La idea es, que exista una opción para guardar ese xls como pdf. Tengo instaladas varias impresoras virtuales para imprimir pdfs, pero no se como llamarlas desde código Delphi.
El usuario "jamás" se debería enterar de que esta usando la impresora virtual. Todo el proceso debe ser "silencioso".
Alguna idea ?.

Imprimir Pdf
Comenzado por
ramiro_md
, jul 19 2013 02:04
3 respuestas en este tema
#1
Escrito 19 julio 2013 - 02:04
#2
Escrito 19 julio 2013 - 05:54
Solo "PDFCreator" y "BullZIP PDF Printer" (te recomiendo encarecidamente la segunda) te permiten modificar la configuración por programa y hacer que silenciosamente guarde el PDF en una cierta carpeta y con un cierto nombre, yo convierto así los ficheros de cualquier tipo a PDF.
-Cambias la impresora por defecto de windows.
-Modificas la conf. de la impresora PDF para que autoguarde en una carpeta y con un cierto nombre.
-Mandas imprimir el XLS.
-Esperas a que el fichero PDF aparezca y que esté accesible para lectura en modo exclusivo.
-Lees el fichero PDF y si acaso lo borras para evitar temporales.
-Repones la configuración de la impresora.
-Repones la impresora por defecto de windows.
Es complicado de hacer porque hay muchos detalles, pero la idea es esa, y si te atrancas en algun detalle, dimelo y te comento como lo hago yo.
Otra opción: Abres el fichero con openoffice/libreoffie, y le pides que lo guarde en formato PDF y listo. Si te interesa esta opción tengo una unit que maneja todo esto, pero ojo, el formato del doc. puede variar algo al abrirlo con otro programa, sobre todo fórmulas, gráficas y esas cosas!
-Cambias la impresora por defecto de windows.
-Modificas la conf. de la impresora PDF para que autoguarde en una carpeta y con un cierto nombre.
-Mandas imprimir el XLS.
-Esperas a que el fichero PDF aparezca y que esté accesible para lectura en modo exclusivo.
-Lees el fichero PDF y si acaso lo borras para evitar temporales.
-Repones la configuración de la impresora.
-Repones la impresora por defecto de windows.
Es complicado de hacer porque hay muchos detalles, pero la idea es esa, y si te atrancas en algun detalle, dimelo y te comento como lo hago yo.
Otra opción: Abres el fichero con openoffice/libreoffie, y le pides que lo guarde en formato PDF y listo. Si te interesa esta opción tengo una unit que maneja todo esto, pero ojo, el formato del doc. puede variar algo al abrirlo con otro programa, sobre todo fórmulas, gráficas y esas cosas!
#3
Escrito 19 julio 2013 - 04:59
Sergio, muchas gracias por la respuesta, tengo ambas impresoras instaladas.
Pero, si fueras tan amable, podrías indicarme como comunicarme con ellas meniante el uso de COM ?. Soy nuevo en estas cuestiones.
Saludos, y desde ya, muchas gracias.
Pero, si fueras tan amable, podrías indicarme como comunicarme con ellas meniante el uso de COM ?. Soy nuevo en estas cuestiones.
Saludos, y desde ya, muchas gracias.
#4
Escrito 22 julio 2013 - 02:24
Sergio, muchas gracias por la respuesta, tengo ambas impresoras instaladas.
Pero, si fueras tan amable, podrías indicarme como comunicarme con ellas meniante el uso de COM ?. Soy nuevo en estas cuestiones.
Saludos, y desde ya, muchas gracias.
La información oficial sobre BullZIP la tienes en su web http://www.bullzip.c...df/doc/info.php
Yo la uso así más o menos (son varios copia-pega de mi código):
delphi
//Parametros y sus valores por defecto en BullZip const BullzipParams: array [0..7] of string = ('output', 'showsettings', 'showsaveas', 'showprogress', 'showprogressfinished', 'showpdf', 'confirmoverwrite', 'mergefile'); const BullzipValues: array [0..7] of string = ('<env:tmp>\<title>.pdf', 'never', 'never', 'yes', 'no', 'no', 'no', ''); PDFCreatorCOM: OleVariant; PDFCreatorCOM:= CreateOLEObject('Bullzip.PDFPrinterSettings'); //Configuro Bullzip PDF Printer... // //Por defecto solo pide confirmación del nombre de fichero a grabar si usas //variables tipo <Title> para definir su nombre, si le pasas un nombre //concreto como se hace aquí, no habría que activar ningun "AutoSave". // //En la documentacion de Bullzip recomiendan cambiar estas opciones: try for i:= 0 to High(BullzipParams) do PDFCreatorCOM.SetValue(BullzipParams[i], BullzipValues[i]); PDFCreatorCOM.WriteSettings(true); //Compruebo que responde... Application.ProcessMessages; Txt:= PDFCreatorCOM.GetValue(BullzipParams[0]); if (Txt<>BullzipValues[0]) then raise Exception.create('"Bullzip PDF Printer" no funciona '+ 'bien, no cambia los parámetros según se le ordena.'); result:= true; except on E: Exception do begin Log.Add('No se ha podido configurar la impresora "Bullzip PDF Printer"'+': '+E.Message); result:= false; end; end;
Con eso tiene la impresora imprimiendo en la carpeta temporal con nombres de fichero = titulo del trabajo de impresión, solo te falta fijarla como impresora del sistema y pedirle a excel que imprima el documento, esperas al fichero y listo.