C/Visual C - Cambiar orientación de papel a horizontal

 
Vista:

Cambiar orientación de papel a horizontal

Publicado por jagonzalezp (2 intervenciones) el 14/01/2003 11:56:59
Hola,

necesito cambiar la orientación del papel de la impresora a horizontal en C++, pero no quiero hacerlo mostrando ninguna ventana sino por medio de codigo. La impresora esta en red (por si tiene algo que ver). Tengo codigo en C++ para cambiarla pero no parece hacer mucho caso.

Si alguien sabe algo al respecto...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Cambio de orientación de papel a horizontal en impresora de red sin ventanas

Publicado por Alejandro (980 intervenciones) el 28/04/2025 18:01:19
Para cambiar la orientación del papel de una impresora de red a horizontal (landscape) en C++ sin mostrar ninguna ventana, puedes utilizar la API de Windows para manipular la configuración de la impresora. A continuación, te muestro un ejemplo de cómo hacerlo:

Ejemplo de código



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <windows.h>
#include <iostream>
 
void CambiarOrientacionImpresora(const std::string& nombreImpresora) {
    // Abre la impresora
    HANDLE hPrinter;
    if (!OpenPrinter(const_cast<LPSTR>(nombreImpresora.c_str()), &hPrinter, NULL)) {
        std::cerr << "Error al abrir la impresora." << std::endl;
        return;
    }
 
    // Obtiene la configuración de la impresora
    DEVMODE* pDevMode = NULL;
    DWORD dwNeeded = DocumentProperties(NULL, hPrinter, NULL, NULL, NULL, 0);
    if (dwNeeded > 0) {
        pDevMode = (DEVMODE*)GlobalAlloc(GPTR, dwNeeded);
        if (DocumentProperties(NULL, hPrinter, NULL, pDevMode, NULL, DM_OUT_BUFFER) == IDOK) {
            // Cambia la orientación a horizontal (landscape)
            pDevMode->dmOrientation = DMORIENT_LANDSCAPE;
 
            // Actualiza la configuración de la impresora
            if (DocumentProperties(NULL, hPrinter, NULL, pDevMode, pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER) != IDOK) {
                std::cerr << "Error al actualizar la configuración de la impresora." << std::endl;
            }
        }
        GlobalFree(pDevMode);
    }
 
    // Cierra la impresora
    ClosePrinter(hPrinter);
}
 
int main() {
    std::string nombreImpresora = "Nombre de tu impresora"; // Cambia esto por el nombre de tu impresora
    CambiarOrientacionImpresora(nombreImpresora);
    return 0;
}

Explicación del código



1. OpenPrinter: Abre la impresora especificada por su nombre. Asegúrate de que el nombre de la impresora sea correcto.

2. DocumentProperties: Se utiliza para obtener y establecer las propiedades de la impresora. Primero, se llama para obtener el tamaño necesario para el `DEVMODE`.

3. DEVMODE: Esta estructura contiene información sobre la configuración de la impresora. Cambiamos el campo `dmOrientation` a `DMORIENT_LANDSCAPE` para establecer la orientación horizontal.

4. Actualizar configuración: Se llama nuevamente a `DocumentProperties` para aplicar los cambios.

5. Cierre de recursos: Finalmente, se libera la memoria y se cierra el manejador de la impresora.

Consideraciones



- Asegúrate de que tu aplicación tenga los permisos necesarios para acceder a la impresora de red.
- El nombre de la impresora debe coincidir exactamente con el que está configurado en el sistema.
- Este código está diseñado para ejecutarse en un entorno de Windows, ya que utiliza la API de Windows.

Con este enfoque, deberías poder cambiar la orientación del papel de la impresora a horizontal sin mostrar ninguna ventana. ¡Buena suerte, Jagonzalezp!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar