La Web del Programador: Comunidad de Programadores
 
    Pregunta:  52981 - OBJETO OLE PARA ACROBAT STANDARD
Autor:  Marta Fernández
Saludos a todo el mundo que me lea, necesito saber como poder imprimir un DataWindow composite en formato PDF, he probado el SaveAs y no me lo hace bien, he probado Print de DataWindow y me sale la ventana de diálogo, pero necesito que esté todo automatizado, ¿alguien sabe de alguna API u objeto OLE? Muchas gracias!

  Respuesta:  Jose Cardenas
Yo hago los siguiente:

string ls_impresora, ls_default

//Obtener la impresora actual comp predeterminada
RegistryGet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows", "Device", ls_default)

ls_impresora = f_impresoras ("Adobe PDF")
dw_listar.Modify("DataWindow.Print.DocumentName='" + NOMBRE+ "'")

dw_listar.Print ()

ls_impresora = f_impresoras (ls_default)

// El codigo de La funcion f_impresoras

integer nret
string ls_default, ls_driver, ls_port, ls_printer, ls_key, ls_config,ls_valores
string nulo
setnull(nulo)

if isnull(as_impresora) then return nulo

environment env
GetEnvironment(env)
if env.OSType = WindowsNT! then

//Obtener la impresora actual comp predeterminada
RegistryGet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows", "Device", ls_default)

ls_default=mid(ls_default,1,pos(ls_default,",") -1) //impresora instalada
//como predeterminada
if upper(ls_default) = upper(as_impresora) then
//si ya esta como predeterminada retorna
return (ls_default)
end if

//Obtiene los valores de la impresora a poner
RegistryGet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices", as_impresora, ls_valores)
nret = RegistrySet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows", "Device", as_impresora+","+ls_valores)
if nret <> 1 then
// Messagebox("Error...", "No se pudo cambiar la impresora predeterminada.")
return (nulo)
end if
//Devuelve el nombre de la impresora que estaba predeterminadaç

return (ls_default)
end if

if env.OSType = Windows! then
RegistryGet("HKEY_LOCAL_MACHINE\Config\0001\System\CurrentControlSet\Control\Print\Printers", "default", ls_default)
if upper(ls_default) = upper(as_impresora) then
//si ya esta como predeterminada retorna
return (ls_default)
end if
//Obtiene los valores de la impresora a poner
nret = RegistrySet("HKEY_LOCAL_MACHINE\Config\0001\System\CurrentControlSet\Control\Print\Printers", "default", as_impresora)
if nret <> 1 then
// Messagebox("Error...", "No se pudo cambiar la impresora predeterminada.")
return (nulo)
end if
//Poner el driver y el nombre de la impresora en WIN.INI
ls_key = "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print\Printers\"+as_impresora
RegistryGet(ls_key, "Printer Driver", ls_driver) //obtener driver
RegistryGet(ls_key, "Port", ls_port) //obtener puerto
ls_config = ls_driver + "," + ls_port
ls_printer = as_impresora + "," + ls_Config
nret = SetProfileString("c:\windows\win.ini", "Windows", "device",ls_printer)
if nret <> 1 then
// Messagebox("Error...", "No se pudo modificar el archivo Win.ini")
return(nulo)
end if
//Devuelve el nombre de la impresora que estaba predeterminada
return (as_impresora)
end if
return (nulo)

Si tienes cualquier duda me escribes un email.

Suerte