#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;
}