Ir al contenido


Foto

Imprimir Pdf


  • Por favor identifícate para responder
3 respuestas en este tema

#1 ramiro_md

ramiro_md

    Advanced Member

  • Miembros
  • PipPipPip
  • 84 mensajes

Escrito 19 julio 2013 - 02:04

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 ?.
  • 0

#2 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

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!

  • 0

#3 ramiro_md

ramiro_md

    Advanced Member

  • Miembros
  • PipPipPip
  • 84 mensajes

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.
  • 0

#4 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

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
  1. //Parametros y sus valores por defecto en BullZip
  2. const BullzipParams: array [0..7] of string =
  3.       ('output', 'showsettings', 'showsaveas', 'showprogress',
  4.       'showprogressfinished', 'showpdf', 'confirmoverwrite',
  5.       'mergefile');
  6. const BullzipValues: array [0..7] of string =
  7.       ('<env:tmp>\<title>.pdf', 'never', 'never', 'yes', 'no', 'no', 'no', '');
  8.  
  9. PDFCreatorCOM: OleVariant;
  10.  
  11. PDFCreatorCOM:= CreateOLEObject('Bullzip.PDFPrinterSettings');
  12.  
  13.     //Configuro Bullzip PDF Printer...
  14.     //
  15.     //Por defecto solo pide confirmación del nombre de fichero a grabar si usas
  16.     //variables tipo <Title> para definir su nombre, si le pasas un nombre
  17.     //concreto como se hace aquí, no habría que activar ningun "AutoSave".
  18.     //
  19.     //En la documentacion de Bullzip recomiendan cambiar estas opciones:
  20.     try
  21.       for i:= 0 to High(BullzipParams) do
  22.         PDFCreatorCOM.SetValue(BullzipParams[i], BullzipValues[i]);
  23.       PDFCreatorCOM.WriteSettings(true);
  24.       //Compruebo que responde...
  25.       Application.ProcessMessages;
  26.       Txt:= PDFCreatorCOM.GetValue(BullzipParams[0]);
  27.       if (Txt<>BullzipValues[0]) then
  28.         raise Exception.create('"Bullzip PDF Printer" no funciona '+
  29.           'bien, no cambia los parámetros según se le ordena.');
  30.       result:= true;
  31.     except
  32.       on E: Exception do begin
  33.         Log.Add('No se ha podido configurar la impresora "Bullzip PDF Printer"'+': '+E.Message);
  34.         result:= false;
  35.       end;
  36.     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.
  • 0




IP.Board spam blocked by CleanTalk.