Fecha actual Lun Jun 17, 2024 10:15 am

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 2 mensajes ] 
Autor Mensaje
NotaPublicado: Dom Oct 31, 2010 2:27 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
Hola, de nuevo, a TODOS.

Hace un tiempo dejé por aquí unos apuntes sobre la creación de PDF's desde C3. Bueno pues he seguido con el tema ya que no me hice caso a mí mismo y traté de hacerlos funcionar por otro método. Me explico. Yo dejé aquí una rutina que accedia a VBS desde C3 y inicializaba PDFCreator y FUNCIONABA!!!, pero tambien encontré en la WEB otra que hablaba de hacer lo mismo modificando el registro de windows; MENTIRA!!!!!!!!!!!!!!!......
Si os encontrais este 'truco-trucho' NO lo utiliceis ya que hace que PDFCreator funcione cuando le parece, os volverá locos y no conseguireis que trabaje de una forma estable.
No voy a poner la rutina-trucha porque no funciona.
A continuación os cuento el resultado que 'parece' que SI funciona:

/* --------------------- */

FUNCTION StorePDFOptions( lShow, cDirectory, cFileName, cPDFPrinter ) AS Logical

DEFAULT lShow TO False, cPDFPrinter TO "PDFTrueGEx"

WITH CreateObject( "MSScriptControl.ScriptControl" )
:Language := "VBScript"
:Reset()
:AddCode( 'Function StorePDFOptions()' + CRLF +;
' Dim PDFCreator' + CRLF +;
' Set PDFCreator = CreateObject("PDFCreator.clsPDFCreator")' + CRLF +;
' PDFCreator.cStart "/NoProcessingAtStartup"' + CRLF +;
' WITH PDFCreator' + CRLF +;
' .cOption("UseAutosave") = 1' + CRLF +;
' .cOption("UseAutosaveDirectory") = 1' + CRLF +;
' .cOption("AutosaveFormat") = 0' + CRLF +;
' .cOption("NoConfirmMessageSwitchingDefaultPrinter") = 1' + CRLF +;
' .cOption("AutosaveDirectory")="' + cDirectory + '"' + CRLF +;
' .cOption("AutosaveFilename")="'+ cFileName + '"' + CRLF +;
' .cSaveOptions' + CRLF +;
' .cClose' + CRLF +;
' End With' + CRLF +;
'End Function' )
:ExecuteStatement("StorePDFOptions")
:Destroy()
ENDWITH
RETURN True

Este primer paso hace que PDFCreator reciba los parámetros adecuados y podamos continuar.

Conectamos con PDFCreator

oPDFCreator := CreateOleObject( "PDFCreator.clsPDFCreator" )
IF !oPDFCreator:cStart( "/NoProcessingAtStartup" )
oPDFCreator:Destroy()
? "ya esta ejecutandose PDFCreator"
ENDIF

Abrimos el documento Word que queremos convertir (ya se que a partir de ofiice 2007 viene integrado el guardar como pdf, pero no este el caso)

oWord := CreateOleObject( "Word.Application" )
IF IsNil( oPDFCreator )
oWord:Destroy()
? "Word no está"
ENDIF

y ahora el 'mogollon'

oPDFCreator:cClearCache()
oWord:Visible := False
cDefaultPrinter := oWord:ActivePrinter
oWord:ActivePrinter := "PDFTrueGEx"
oDoc := oWord:Documents:Open( cArchivoOrigen )
oPDFCreator:cPrinterStop := True
oWord:ActiveDocument:PrintOut()

WHILE oWord:BackgroundPrintingStatus <> 0
Sleep( 10 )
DO EVENTS
END

oPDFCreator:cPrinterStop := False
oWord:ActivePrinter := cDefaultPrinter
cOutputFilename := oPDFCreator:cOutputFilename

PDFCreatorWait( cOutputFilename )

Esta última funcion es importante:

/*
----------------------------------------------------------------------------
Espera un tiempo determinado o hasta que el archivo PDF esta disponible
----------------------------------------------------------------------------
*/

FUNCTION PDFCreatorWait( cOutputFilename ) AS VOID

LOCAL nSeconds AS NUMBER

nSeconds := Seconds() + 30

WHILE !File( cOutputFilename ) .AND. ( Seconds() <= nSeconds )
DO EVENTS
END

RETURN

Y para terminar:

oPDFCreator:cClose()
oPDFCreator:Destroy()

oDoc:Close( 0 )
oWord:Quit( 0 )
oWord:Destroy()

oDlg:Destroy()

RestorePDFOptions()

Esta última lo que hace es dejar PDFCreator en su estado 'natural'

FUNCTION RestorePDFOptions() AS VOID
WITH CreateObject( "MSScriptControl.ScriptControl" )
:Language := "VBScript"
:Reset()
:AddCode( 'Function RestorePDFOptions()' + CRLF +;
' Dim PDFCreator' + CRLF +;
' Set PDFCreator = CreateObject("PDFCreator.clsPDFCreator")' + CRLF +;
' PDFCreator.cStart "/NoProcessingAtStartup"' + CRLF +;
' WITH PDFCreator' + CRLF +;
' .cOption("UseAutosave") = 0' + CRLF +;
' .cOption("UseAutosaveDirectory") = 1' + CRLF +;
' .cOption("AutosaveFormat") = 0' + CRLF +;
' .cOption("NoConfirmMessageSwitchingDefaultPrinter") = 0' + CRLF +;
' .cOption("AutosaveDirectory") = "<MyFiles>\"' + CRLF +;
' .cOption("AutosaveFilename") = "<DateTime>"' + CRLF +;
' .cSaveOptions' + CRLF +;
' .cClose' + CRLF +;
' End With' + CRLF +;
'End Function' )
:ExecuteStatement("RestorePDFOptions")
:Destroy()
ENDWITH
RETURN

Bueno, estas son mis experiencias......

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Mié Nov 10, 2010 10:28 pm 

Registrado: Lun Ene 08, 2007 5:56 pm
Mensajes: 91
Super, cuando tenga un tiempo lo probare, y te cuento , gracias por esos comentarios y experiencias
Saludos

_________________
Saludos.
German


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 2 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a:  
cron