C/Visual C - Impresion de un archivo ? posicionamiento

 
Vista:

Impresion de un archivo ? posicionamiento

Publicado por Acuadras (5 intervenciones) el 20/02/2003 01:55:01
Saludos . una pregunta .. tengo un programa que me regresa la respuesta en un archivo, desde otro programa deseo acceso a dicho archivo respuesta, la pregunta es.. puedo indicarle en que posicion deseo inicie la impresion ? lo que pasa es que lo primeros 3 caracteres no los necesito, yo necesito del 4 caracter en adelante .. por tu ayuda gracias !!!

Aurelio Cuadras !!!
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

Impresión de archivo desde una posición específica

Publicado por Alejandro (1153 intervenciones) el 06/05/2025 00:12:19
Sí, puedes acceder a un archivo y comenzar a imprimir desde una posición específica, omitiendo los primeros caracteres. A continuación, te muestro un ejemplo de cómo hacerlo en C++ utilizando la API de Windows para la impresión.

Ejemplo de código en C++



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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <windows.h>
#include <iostream>
#include <fstream>
 
void enviarArchivoAImpresoraDesdePosicion(const char* nombreArchivo, DWORD posicionInicio) {
    HANDLE hPrinter;
    DOCINFO di;
    DWORD dwWritten;
 
    // Abrir la impresora
    if (!OpenPrinter((LPSTR)"Nombre de la impresora", &hPrinter, NULL)) {
        std::cerr << "Error al abrir la impresora." << std::endl;
        return;
    }
 
    // Configurar la información del documento
    di.cbSize = sizeof(DOCINFO);
    di.lpszDocName = "Documento de prueba";
    di.lpszOutput = NULL;
    di.lpszDatatype = NULL;
    di.fwType = 0;
 
    // Iniciar el documento
    if (StartDoc(hPrinter, &di) > 0) {
        // Iniciar la página
        StartPage(hPrinter);
 
        // Abrir el archivo
        std::ifstream archivo(nombreArchivo, std::ios::binary);
        if (archivo) {
            // Mover el puntero del archivo a la posición deseada
            archivo.seekg(posicionInicio, std::ios::beg);
 
            // Leer el archivo y enviarlo a la impresora
            char buffer[4096];
            while (archivo.read(buffer, sizeof(buffer))) {
                WritePrinter(hPrinter, buffer, archivo.gcount(), &dwWritten);
            }
            // Enviar cualquier dato restante
            WritePrinter(hPrinter, buffer, archivo.gcount(), &dwWritten);
 
            archivo.close();
        } else {
            std::cerr << "Error al abrir el archivo." << std::endl;
        }
 
        // Finalizar la página y el documento
        EndPage(hPrinter);
        EndDoc(hPrinter);
    } else {
        std::cerr << "Error al iniciar el documento." << std::endl;
    }
 
    // Cerrar la impresora
    ClosePrinter(hPrinter);
}
 
int main() {
    const char* nombreArchivo = "ruta/del/archivo.txt"; // Cambia esto por la ruta de tu archivo
    DWORD posicionInicio = 3; // Iniciar desde el cuarto carácter (índice 3)
    enviarArchivoAImpresoraDesdePosicion(nombreArchivo, posicionInicio);
    return 0;
}

Explicación



1. Abrir la impresora: Se utiliza `OpenPrinter` para abrir la impresora especificando su nombre.

2. Configurar el documento: Se configura la estructura `DOCINFO` para definir el nombre del documento que se enviará a la impresora.

3. Iniciar el documento y la página: Se inicia el documento y la página con `StartDoc` y `StartPage`.

4. Abrir el archivo: Se abre el archivo en modo binario utilizando `std::ifstream`.

5. Mover el puntero del archivo: Se utiliza `seekg` para mover el puntero del archivo a la posición deseada (en este caso, al cuarto carácter).

6. Leer y enviar el archivo: Se lee el archivo en bloques y se envía a la impresora con `WritePrinter`.

7. Finalizar el documento: Se finaliza la página y el documento con `EndPage` y `EndDoc`.

8. Cerrar la impresora: Finalmente, se cierra la impresora con `ClosePrinter`.

Notas



- Asegúrate de reemplazar `"Nombre de la Impresora"` con el nombre real de tu impresora y `"ruta/del/archivo.txt"` con la ruta del archivo que deseas imprimir.
- Este código es específico para Windows. Si estás utilizando otro sistema operativo, el enfoque será diferente.

¡Espero que esto te sea útil, Acuadras!
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