Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-10-2016
tarco35 tarco35 is offline
Miembro
 
Registrado: Sep 2003
Posts: 192
Poder: 16
tarco35 Va por buen camino
Error al actualizar PDFcreator

Hola, hasta hace poco el codigo usado para generar un report (qreport) y generar con pdfcreator 1.7.3 el archivo correspondiente funcionaba correctamente, el código es de Roman (moderador):
Código Delphi [-]
 OldPrinterIndex := FormImprimePaciente.PrnPaciente.PrinterSettings.PrinterIndex;
  FormImprimePaciente.PrnPaciente.PrinterSettings.PrinterIndex := PrinterIndex;
  PdfCreator := CreateOLEOBject('PDFCreator.clsPDFCreator');
  try
    PdfCreator.cStart();
    PdfCreator.cOption('UseAutosave') := 1;
    PdfCreator.cOption('UseAutosaveDirectory') := 1;
    PdfCreator.cOption('AutosaveDirectory') := RutaGuardar;
    PdfCreator.cOption('AutosaveFilename') := NombreFichero; // la extensión es opcional
    PdfCreator.cOption('AutosaveFormat') := 0; // PDF format

    FormImprimePaciente.PrnPaciente.ReportTitle := 'BIA_Test: Datos Paciente';
    With FormImprimePaciente Do begin
      If FileExists(ModuloDatos.TablaCentroTrabajoNombreLogo.AsString) then
        QRLogo.Picture.LoadFromFile(ModuloDatos.TablaCentroTrabajoNombreLogo.AsString)
      Else QRLogo.Picture := nil;
      QRLogo.Stretch := ModuloDatos.TablaCentroTrabajoAjusteLogo.AsBoolean;
      QRLabel94.Caption := ModuloDatos.TablaCentroTrabajoNombre1.AsString;
      QRLabel24.Caption := ModuloDatos.TablaCentroTrabajoNombre2.AsString;
      QRLabel95.Caption := ModuloDatos.TablaCentroTrabajoLinea1.AsString;
      QRLabel99.Caption := ModuloDatos.TablaCentroTrabajoLinea2.AsString;
      QRLabel96.Caption := ModuloDatos.TablaCentroTrabajoLinea3.AsString;
      QRLabel2.Caption:=ModuloDatos.TablaPacientesAPELLIDOS.AsString;
      QRLabel4.Caption:=ModuloDatos.TablaPacientesNOMBRE.AsString;
      QRLabel6.Caption:=ModuloDatos.TablaPacientesDIRECCION.AsString;
      QRLabel8.Caption:=ModuloDatos.TablaPacientesPROVINCIA.AsString;
      QRLabel10.Caption:=ModuloDatos.TablaPacientesCIUDAD.AsString;
      QRLabel12.Caption:=ModuloDatos.TablaPacientesPOSTAL.AsString;
      QRLabel14.Caption:=ModuloDatos.TablaPacientesFECHA.AsString;
      QRLabel16.Caption:=ModuloDatos.TablaPacientesTELEFONO.AsString;
      QRLabel17.Caption:=ModuloDatos.TablaPacientesFAX.AsString;
      QRLabel26.Caption:=ModuloDatos.TablaPacientesCORREO.AsString;
    end;

    Screen.Cursor := crHourGlass;
    FormImprimePaciente.PrnPaciente.Prepare;
    FormImprimePaciente.PrnPaciente.Print;
  finally
    // método rudimentario para saber cuando terminó de crearse el archivo
    while not FileExists(RutaGuardar+'\'+NombreFichero+'.pdf') do
      Application.ProcessMessages;
    // Cerramos el monitor
    PdfCreator.cClose;
    PdfCreator := Unassigned;
  end;
  Screen.Cursor := crDefault;
  FormPrincipal.KillTask('PdfCreator.exe');
  FormImprimePaciente.PrnPaciente.PrinterSettings.PrinterIndex := OldPrinterIndex;

Como la versión de PDFcreator es antigua, al actualizar a la 2.3, que ahora mismo es la ultima, me lanza una ventana de error diciendo " Cadena clase no valida", porque habran cambiado los parametros que se pasan como opciones al objeto OLE.
Lo que hacia es generar el documento sin que la ventana de creación apareciera en pantalla y quiero que siga así....
Como identificaria la version del pdfcreator para que no pase esto, o mejor... que parametros son los que necesita ahora??
Gracias.
Responder Con Cita
  #2  
Antiguo 09-10-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: May 2003
Ubicación: Ciudad de México
Posts: 20.181
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
¡Dios! ¡Qué viejo estoy! No recuerdo esto Supongo que puedes buscar la cadena PDFCreator en el registro de windows para ver cuál es la cadena exacta.

LineComment Saludos
Responder Con Cita
  #3  
Antiguo 09-10-2016
tarco35 tarco35 is offline
Miembro
 
Registrado: Sep 2003
Posts: 192
Poder: 16
tarco35 Va por buen camino
busqueda

Que tengo que buscar? porque he mirado con el regedit buscando PDFCreator y no veo nada que se parezca a parametros o cosas asi
Responder Con Cita
  #4  
Antiguo 10-10-2016
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: May 2008
Ubicación: Bogotá
Posts: 508
Poder: 11
TOPX Va camino a la fama
Hola, tiene que buscar la documentación oficial de PdfCreator. Ahí encontré que:
Cita:
The old COM Interface (v1.7.*) consisted of three different objects: the clsPDFCreator object, the clsPDFCreatorOptions and the clsPDFCreatorError.

In opposite to that, the new COM Interface (v2.*) has five different objects: the Queue object, the PrintJob object, the PDFCreatorObj object, the Printers object, the OutputFiles object.
Fuente: Migrating from PDFCreator 1.7 to 2.0 - PDFCreator 2.3.2 documentation
-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #5  
Antiguo 12-10-2016
tarco35 tarco35 is offline
Miembro
 
Registrado: Sep 2003
Posts: 192
Poder: 16
tarco35 Va por buen camino
no se

He estado mirando el enlace... y no lo entiendo...
Si hay alguien que sea capaz de comprenderlo, al principio puse el.codigo que uso... si puede traducirlo a las.sentencias nuevas... porque yo no lo veo
Resumiendo, que pdfcreator no te daque.ninguna ventana y pasarle el nombre de archivo que va a generar el qreport
Responder Con Cita
  #6  
Antiguo 06-12-2017
golf2008 golf2008 is offline
Miembro
 
Registrado: Feb 2008
Posts: 146
Poder: 11
golf2008 Va por buen camino
Hola Tarco, actualmente tengo el mismo problema que planteaste en este hilo.

Le encontraste la solución ??

Lo que yo hago es desinstalar la nueva versión, e reinstalar la vieja.

No pude encontrar una solución a este problema.

Saludos
Responder Con Cita
  #7  
Antiguo 08-05-2018
manelb manelb is offline
Miembro
 
Registrado: Mar 2017
Posts: 131
Poder: 2
manelb Va por buen camino
Saludos a todos...

No se si alguien ha solucionado este tema, pero yo lo estoy revisando ahora.

He conseguido evitar el error de esta linea

Código Delphi [-]
PdfCreator := CreateOLEOBject('PDFCreator.clsPDFCreator');

cambiándola por esta otra encontrada en un ejemplo de VB

Código Delphi [-]
PdfCreator := CreateOLEObject('PDFCreator.PDFCreatorObj');

pero a continuación se produce un error en todas las siguientes

Código Delphi [-]
    PdfCreator.cStart();
    PdfCreator.cOption('UseAutosave') := 1;
    PdfCreator.cOption('UseAutosaveDirectory') := 1;
    PdfCreator.cOption('AutosaveDirectory') := RutaGuardar;
    PdfCreator.cOption('AutosaveFilename') := NombreFichero; // la extensión es opcional
    PdfCreator.cOption('AutosaveFormat') := 0; // PDF format

con el mensaje: "Method cStart not supoorted by automation object."


¿ Alguna idea ?

Sigo investigando ....
Responder Con Cita
  #8  
Antiguo 09-05-2018
QuiqueSalamanca QuiqueSalamanca is offline
Miembro
 
Registrado: Mar 2014
Posts: 27
Poder: 0
QuiqueSalamanca Va por buen camino
Cita:
Empezado por manelb Ver Mensaje
Saludos a todos...

No se si alguien ha solucionado este tema, pero yo lo estoy revisando ahora.

He conseguido evitar el error de esta linea

Código Delphi [-]
PdfCreator := CreateOLEOBject('PDFCreator.clsPDFCreator');

cambiándola por esta otra encontrada en un ejemplo de VB

Código Delphi [-]
PdfCreator := CreateOLEObject('PDFCreator.PDFCreatorObj');

pero a continuación se produce un error en todas las siguientes

Código Delphi [-]
    PdfCreator.cStart();
    PdfCreator.cOption('UseAutosave') := 1;
    PdfCreator.cOption('UseAutosaveDirectory') := 1;
    PdfCreator.cOption('AutosaveDirectory') := RutaGuardar;
    PdfCreator.cOption('AutosaveFilename') := NombreFichero; // la extensión es opcional
    PdfCreator.cOption('AutosaveFormat') := 0; // PDF format

con el mensaje: "Method cStart not supoorted by automation object."


¿ Alguna idea ?

Sigo investigando ....
Buenas, prueba esto:

Código Delphi [-]
OldPrinterIndex := FormImprimePaciente.PrnPaciente.PrinterSettings.PrinterIndex;
  FormImprimePaciente.PrnPaciente.PrinterSettings.PrinterIndex := PrinterIndex;
  PdfCreator := CreateOLEOBject('PDFCreator.JobQueue'); //La cola de impresion
  try
    PdfCreator.Initialize(); //Empieza la guerra    

    FormImprimePaciente.PrnPaciente.ReportTitle := 'BIA_Test: Datos Paciente';
    With FormImprimePaciente Do begin
      If FileExists(ModuloDatos.TablaCentroTrabajoNombreLogo.AsString) then
        QRLogo.Picture.LoadFromFile(ModuloDatos.TablaCentroTrabajoNombreLogo.AsString)
      Else QRLogo.Picture := nil;
      QRLogo.Stretch := ModuloDatos.TablaCentroTrabajoAjusteLogo.AsBoolean;
      QRLabel94.Caption := ModuloDatos.TablaCentroTrabajoNombre1.AsString;
      QRLabel24.Caption := ModuloDatos.TablaCentroTrabajoNombre2.AsString;
      QRLabel95.Caption := ModuloDatos.TablaCentroTrabajoLinea1.AsString;
      QRLabel99.Caption := ModuloDatos.TablaCentroTrabajoLinea2.AsString;
      QRLabel96.Caption := ModuloDatos.TablaCentroTrabajoLinea3.AsString;
      QRLabel2.Caption:=ModuloDatos.TablaPacientesAPELLIDOS.AsString;
      QRLabel4.Caption:=ModuloDatos.TablaPacientesNOMBRE.AsString;
      QRLabel6.Caption:=ModuloDatos.TablaPacientesDIRECCION.AsString;
      QRLabel8.Caption:=ModuloDatos.TablaPacientesPROVINCIA.AsString;
      QRLabel10.Caption:=ModuloDatos.TablaPacientesCIUDAD.AsString;
      QRLabel12.Caption:=ModuloDatos.TablaPacientesPOSTAL.AsString;
      QRLabel14.Caption:=ModuloDatos.TablaPacientesFECHA.AsString;
      QRLabel16.Caption:=ModuloDatos.TablaPacientesTELEFONO.AsString;
      QRLabel17.Caption:=ModuloDatos.TablaPacientesFAX.AsString;
      QRLabel26.Caption:=ModuloDatos.TablaPacientesCORREO.AsString;
    end;

    Screen.Cursor := crHourGlass;
    FormImprimePaciente.PrnPaciente.Prepare;
    FormImprimePaciente.PrnPaciente.Print;

    if not ( PdfCreator.WaitForJob( 15 ) ) then //15 segundos de espera para que llegue a la cola
      ShowMessage( 'El trabajo no ha llegado a la cola de impresión después de 15 segundos.' );

    oTrabajo := PdfCreator.NextJob; //Obtenemos el trabajo de impresión
   
    oTrabajo.SetProfileByGuid( 'DefaultGuid' ); //DefaultGuid crea un PDF normal...

    oTrabajo.ConvertTo( RutaGuardar+'\'+NombreFichero+'.pdf' ); //Convertimos el trabajo, debe ser la ruta con el nombre del PDF CON EXTENSION!
   
   if ( not  oTrabajo.IsFinished )     or      //Si no ha terminado o no ha tenido exito
      ( not  oTrabajo.IsSuccessful ) then
     raise Exception.Create( 'Error al convertir' );


  finally
  // Cuidado que puede quedarse en bucle... 
  // método rudimentario para saber cuando terminó de crearse el archivo
    while not FileExists(RutaGuardar+'\'+NombreFichero+'.pdf') do
      Application.ProcessMessages;
    // Cerramos el monitor
    PdfCreator.cClose;
    PdfCreator := Unassigned;
  end;
  Screen.Cursor := crDefault;
  FormPrincipal.KillTask('PdfCreator.exe');
  FormImprimePaciente.PrnPaciente.PrinterSettings.PrinterIndex := OldPrinterIndex;

Nota: la variable oTrabajo debe ser del mismo tipo que el objeto PdfCreator

Ya nos dices!
Responder Con Cita
  #9  
Antiguo 09-05-2018
manelb manelb is offline
Miembro
 
Registrado: Mar 2017
Posts: 131
Poder: 2
manelb Va por buen camino
Gracias Quique.
Con tus indicaciones y la ayuda de todos parece que finalmente lo he conseguido.

He tenido que hacer algunas pequeñas variaciones para que tu codigo me funcione, pero supongo que debe ser por las diferentes versiones del PDFCreator.

Por ejemplo:
1.-He cambiado
Código Delphi [-]
PdfCreator.Initialize();
por
Código Delphi [-]
PdfCreator.Initialize;
sin parentesis. Con paréntesisi me daba error.

2.- He tenido algun problema con
Código Delphi [-]
oTrabajo.ConvertTo( RutaGuardar+'\'+NombreFichero+'.pdf' );
Hasta que he descubierto que la ruta es sensible a mayúsculas/minúsculas.

3.-Esta línea también me daba error
Código Delphi [-]
PdfCreator.cClose;
y la he substituido por

Código Delphi [-]
PDFCreator.ReleaseCom;

tal y como he visto que recomendaban en la documentación oficial que comentaba el compañero TOPX más arriba.

4.-Otra cuestión que me ha entretenido ha sido conseguir que no se abriera el pdf una vez creado.
Lo he conseguido con
Código Delphi [-]
oTrabajo.SetProfileSetting('OpenViewer','False');
teniendo en cuenta que el parámetro booleano se tenia que passar como string.

Bien..., creo que eso es todo.
Gracias a todos por la ayuda.
Responder Con Cita
  #10  
Antiguo 09-05-2018
QuiqueSalamanca QuiqueSalamanca is offline
Miembro
 
Registrado: Mar 2014
Posts: 27
Poder: 0
QuiqueSalamanca Va por buen camino
De nada hombre!

Yo te lo escribí en cinco minutos sin poder probar nada, solo con lo que leí en la ayuda!

Me alegro que lo hayas conseguido!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Delphi - PDFCreator - Ajustes shoulder Varios 5 29-07-2015 18:33:27
impresion por comandos con pdfcreator URBANO Impresión 2 04-03-2015 14:40:00
PDFCreator llamar pasando parametros Auto-guardado y nombre lacovera Impresión 2 25-06-2010 10:54:12
Acceder a la interface de PDFCreator hob Impresión 0 09-11-2006 21:16:54
Como utilizar las funciones de PDFcreator hob Impresión 0 08-11-2006 13:43:16


La franja horaria es GMT +2. Ahora son las 01:12:16.


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