Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-03-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
A mi tu código me funciona bien si quito la línea:

Código Delphi [-]
PDFCreator.cStart('/NoProcessingAtStartup');

que, según la documentación, lo que hace es precisamente impedir que se procesen los documentos:

Cita:
No processing at startup: When you use this setting, PDFCreator will start without processing any documents. You can manually start processing by going to the Document menu and selecting Print or by unchecking the Printer Stop option in the Printer menu. The setting is useful if you want collect some files first, then combine the files into one and create a pdf.
En caso de que esa línea esté presente, entonces puedes iniciar la impresión con

Código Delphi [-]
PdfCreator.cPrinterStop := false;

// Saludos
Responder Con Cita
  #2  
Antiguo 06-03-2012
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Red face

Cita:
Empezado por roman Ver Mensaje
A mi tu código me funciona bien si quito la línea:

Código Delphi [-]
PDFCreator.cStart('/NoProcessingAtStartup');

que, según la documentación, lo que hace es precisamente impedir que se procesen los documentos:



En caso de que esa línea esté presente, entonces puedes iniciar la impresión con

Código Delphi [-]
PdfCreator.cPrinterStop := false;

// Saludos
Ufff, hola he estado de viaje todo el día, pero mañana es lo primero que hago al llegar al despacho. A ver si va a ser eso de no acabar de entender el inglés del todo.....
Gracias Roman.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #3  
Antiguo 07-03-2012
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Desgraciadamente no lo había entendido mal.
Lo que proporciona la ejecución de la instrucción:
Código Delphi [-]
PDFCreator.cStart('/NoProcessingAtStartup');
es la NO ejecución del PDFCreator mostrando la ventana para la introducción de datos del propio programa, lo cual es lo que intentamos evitar.
Intentamos o intento precisamente hacer esa configuración desde código sin mostrar ventana alguna.
Aún así gracias Roman.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.

Última edición por Cabanyaler fecha: 07-03-2012 a las 09:47:28.
Responder Con Cita
  #4  
Antiguo 07-03-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
A mi la ventana me aparece de todas formas, pero el caso es que yo he podido imprimir tal como tú quieres, es decir, generando el archivo sin intervención del usuario, con tu mismo código, omitiendo la línea en cuestión.

// Saludos
Responder Con Cita
  #5  
Antiguo 07-03-2012
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Trabajo con Delphi 6, y el S.O: Windows 7 Profesional de 32 bits.
¿Te importaría enviarme el código completo de tu prueba?.
No consigo hacerlo funcionar.
ES para comprobar carga de las uses, etc y ver si me faltase alguna respecto de tí, aunque no me de error de compilación, quizá no funcione el OLEObject que se crea, porque viendo la cola de impresión del PDFCreator, no se ve aparecer tampoco en ningún momento trabajo alguno.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.

Última edición por Cabanyaler fecha: 07-03-2012 a las 16:14:09.
Responder Con Cita
  #6  
Antiguo 07-03-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola,

Observando con más detalle, veo que me he equivocado. Veamos, no hay que quitar la línea que comento sino sólo su parámetro. Si no se llama al método cStart, el PdfCreator no hace nada de nada.

Aquí un ejemplo de código que me ha funcionado:

Código Delphi [-]
var
  PrinterIndex: Integer;
  OldPrinterIndex: Integer;
  PdfCreator: OleVariant;

begin
  PrinterIndex := Printer.Printers.IndexOf('PdfCreator');
  if PrinterIndex <> -1 then
  begin
    OldPrinterIndex := Printer.PrinterIndex;
    Printer.PrinterIndex := PrinterIndex;

    PdfCreator := CreateOLEOBject('PDFCreator.clsPDFCreator');
    try
      PdfCreator.cStart();
      PdfCreator.cOption('UseAutosave') := 1;
      PdfCreator.cOption('UseAutosaveDirectory') := 1;
      PdfCreator.cOption('AutosaveDirectory') := 'c:\ruta\al\archivo';
      PdfCreator.cOption('AutosaveFilename') := 'test'; // la extensión es opcional
      PdfCreator.cOption('AutosaveFormat') := 0; // PDF format

      Self.Print; // A modo de ejemplo, imprimimos el formulario
    finally
      Printer.PrinterIndex := OldPrinterIndex;

      // método rudimentario para saber cuando terminó de crearse el archivo
      while not FileExists('c:\ruta\al\archivo\test.pdf') do
        Application.ProcessMessages;

      // Cerramos el monitor
      PdfCreator.cClose;
    end;
  end;
end;

Observa que no es necesario guardar las opciones anteriores y restablecerlas después ya que no uso el método cSaveOptions.

// Saludos
Responder Con Cita
  #7  
Antiguo 08-03-2012
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Thumbs up

Gracias Román. No me quito el sombrero porque no llebo.
Simple, sencillo, eficaz y eficiente.
Al final lo hemos conseguido, tal como lo deseamos.
No tengo ni que poner una sóla coma a tu código. Sólo faltaría "almibararlo".
Después de estar varios días lidiando con el código, probando cosas "a palos de ciego", visitar mil webs con casi siempre el mismo ejemplo Cute/Paste, preguntar en este foro, atender a todos los que me habéis ayudado, al final lo hemos conseguido. He de confesar que pensé en dejarlo.
Gracias sobre todo a Román, ElKurgan, Eldioni, Caral y a todos aquellos que habéis podido aportar para solucionar este tema, que entre otras cosas aún no estaba expuesto en este inestimable foro de ayuda y compartición del conocimiento, ni tampoco en la página de Trucomania.
Hasta la próxima, que seguro será otro reto quizá más complicado e inóspito.
Lo que echo de menos es un lugar donde encontrar documentación sobre los métodos del OleObject creado con nombre PDFCreator.

Cerramos hilo.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.

Última edición por Cabanyaler fecha: 08-03-2012 a las 09:32:21.
Responder Con Cita
  #8  
Antiguo 09-03-2012
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Me queda una cosa por depurar, que al no controlar los métodos de que dispone el OLEObject "PDFCreator", no se controlar.
Al parecer, al crear el primer informe en formato pdf con el anterior código visto en las anteriores respuestas, se crea el objeto PDFCReator y se lanza el proceso llamado del mismo nombre (el cual veo en los procesos desde el administrador de tareas del sistema operativo).
La primera creación del pdf se realiza perfectamente, pero veo que la instrucción ...
Código Delphi [-]
PdfCReator.cClose
... no elimina o mata el proceso, por lo que al intentar crear otro informe en pdf, no funciona.
Si salgo de la aplicación (con lo que se mata el proceso PdfCReator), o bien mato al proceso manualmente sin salir de la aplicación, siempre funciona la creación de informes en pdf.
He probado con la instrucción:
Código Delphi [-]
PdfCReator.Quit
Que aunque compila, al ejecutarla dá error.
¿Alguien me puede decir como matar al proceso del PDFCreator desde código?
Pienso que debe ser un método del objeto del tipo PDFCReator.CKill, o PDFCReator.CQuit, pero no acierto a matar ese proceso sin cerrar el programa.
Gracias.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Al pulsar Enter en un boton funciona como Tabulador weke OOP 8 12-09-2011 19:04:01
Pulsar un Botón de una página web. imossa Internet 4 04-05-2007 10:21:01
Capturar teclado o pulsar botón mientas se recorre un bucle Duc Varios 2 31-10-2006 12:14:33
Evento que se ejecuta al Pulsar el boton de Minimizar de una Forma AGAG4 Varios 2 09-10-2004 17:31:38
Pulsar botón y que cambien los números ciscu Varios 2 10-06-2004 20:51:03


La franja horaria es GMT +2. Ahora son las 06:22:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi