Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Quick Report y la amarga Realidad

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Quick Report y la amarga Realidad Responder citando

Amigos del foro, necesito su valiosa opinion; Usando el quick report observo que funciona relativamente byen y rapido los diseños.

En el perfil de mis clientes , la gran mayoria usa impresorea de MATRIZ de punto para emitir reportes (LX 300 EPSON, OKIDATA 320 etc)

Sabemos que las impresoras con su driver correcto imprimen en modo "grafico" quee s el modo de Quick Report, IMPRIMIR un reporte de 25 hojas en una laser o una de inyecccion no es problema, PERO EN UNA DE MATRIZ!!!!, tarda un millon de años

LA razon de usar impresoras de matriz es por el costo de las cintas (2 usd) cada 2 meses contra minimo 80 usd cada dos meses por el mismo numero de hojas impresas.

La solucion que tengo 4es generar el reporte en un TLIST e imprimirloen modo DOS (y saben openprinter, ect etc)

Existe algun aforma de hacer eso conel driver de impresora generica de windows + quick report?

Espero sus comentarios
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

NO NO EXISTE LA FORMA.. CON QUICK REPORT

Q. The graphics mode of my dot matrix mode is too slow,
so I'd like to know if there is another way to print using the text format of the printer.
I must print using the standard size and the compressed size of the fonts as
we used to do in the DOS environment...
A. QuickReport was not designed to do that kind of printing,
you will need to be able to set your printer driver that way and I do not have any information on that.
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Impresion en Matriz de Puntos y/o Impresora Grafica Responder citando

Hola, hace tiempo que ando peleando con eso, fíhate que yo manejo razonablemenete bien el codigo Esc/P2 y casi todas mis impresoras son de matriz así que me cree una clase de impresora que toma un archivo Esc/P2 y lo convierte al tipo gráfico, funciona razonablemnete bien, solo que los cambios de letra de 10cpp a 15 y 17 cpp me quedan enanas, sin embargo se entienden.

--- imprigra.cpp ---
// Utilería que sirve para Imprimir un archivo de Modo Texto en Grafico
// DRBR 26 de Agosto de 2002


//---------------------------------------------------------------------------
#include <stdio.h>
#include "imprigra.h"
#include "impre.h"
int manda_imp (String nomarch_z, String rutaimp_z, int tipoimp, int ff)
{
const int IMPRESORA_GRAFICA = 1;
const int IMPRESORA_MATRIZ = 2;
switch (tipoimp) {
case IMPRESORA_GRAFICA: imprime_gra(nomarch_z); break;
case IMPRESORA_MATRIZ : imprime_txt(nomarch_z, rutaimp_z, ff); break;
}
return 0;
}

int imprime_txt (String nomarch_z, String rutaimp_z, int ff)
{
String cmd_z;
cmd_z = "copy \"" + nomarch_z + "\" " + rutaimp_z + " /b";
system(cmd_z.c_str());
if(ff) {
cmd_z = "copy \\windows\\ff.txt " + rutaimp_z + " /b";
system(cmd_z.c_str());
}
return (mrOk);
}

int imprime_gra (String nomarch_z)
{
const int OK = 1;
const int MI_ERROR = -1;
const int PLANO = 0;
const int ESCAPE = 1;
const int SUBRAYADO = 2;
const int TAM_PICA = 12;
const int TAM_ELITE = 10;
const int TAM_PICA_COND = 6;
const int TAM_ELITE_COND = 4;
const int TAM_DOBLE = 16;
const int SCAPE = 27;
const int CONDENSED_ON = 15;
const int CONDENSED_OFF = 18;
const int EXPANDED_ON = 14;
const int EXPANDED_OFF = 20;
const int FORM_FEED = 12;
int MAX_LIN_X_PAG = 66;

int lineas_z=0, modo_z=0, tamfont_z, anttmfont_z, doble_z=0;
String result_z = "";
char car_z;
FILE *archin;
Timpre *graimpre;

if ((archin = fopen((nomarch_z).c_str(), "rt")) == NULL) {
Application->MessageBox(("No puedo abrir el archivo de Lectura\n"+nomarch_z).c_str(), "Archivo Invalido", MB_ICONEXCLAMATION);
return (MI_ERROR);
}

graimpre = new Timpre();
graimpre->cambia_nombrefont("Lucida Console");
graimpre->cambia_tamfont(TAM_PICA);
tamfont_z = TAM_PICA; anttmfont_z = tamfont_z; doble_z =0;
while ( (car_z = fgetc(archin)) != EOF) {
switch (modo_z) {
case PLANO:
switch(car_z) {
case SCAPE: modo_z = ESCAPE; break;
case '\n' :
if(doble_z) {
graimpre->cambia_tamfont(doble_z); tamfont_z = doble_z;
doble_z = 0;
}
lineas_z++; graimpre->saltalin();
if(lineas_z > MAX_LIN_X_PAG) { graimpre->saltapag(); lineas_z = 0; }
break;
case FORM_FEED: graimpre->saltapag(); lineas_z = 0; break;
case CONDENSED_ON:
switch (tamfont_z) {
case TAM_PICA: tamfont_z =TAM_PICA_COND; break;
case TAM_ELITE: tamfont_z =TAM_ELITE_COND; break;
}
graimpre->cambia_tamfont(tamfont_z);
break;
case CONDENSED_OFF:
switch (tamfont_z) {
case TAM_PICA_COND: tamfont_z =TAM_PICA; break;
case TAM_ELITE_COND: tamfont_z =TAM_ELITE; break;
}
graimpre->cambia_tamfont(tamfont_z);
break;
case EXPANDED_OFF:
if(doble_z) {
graimpre->cambia_tamfont(doble_z); tamfont_z = doble_z;
doble_z = 0;
}
break;
case EXPANDED_ON:
anttmfont_z = tamfont_z; doble_z = anttmfont_z;
switch (tamfont_z) {
case TAM_PICA_COND: tamfont_z =TAM_PICA; break;
case TAM_ELITE_COND: tamfont_z =TAM_ELITE; break;
case TAM_PICA:
case TAM_ELITE: tamfont_z =TAM_DOBLE; break;
}
graimpre->cambia_tamfont(tamfont_z);
break;
default : graimpre->imprime_car(car_z); break;
}
break;
case ESCAPE:
switch(car_z) {
case '-': modo_z = SUBRAYADO; break;
case 'M':
switch (tamfont_z) {
case TAM_PICA_COND: tamfont_z =TAM_ELITE_COND; break;
case TAM_PICA: tamfont_z =TAM_ELITE; break;
}
graimpre->cambia_tamfont(tamfont_z); modo_z = PLANO; break;
case 'P':
switch (tamfont_z) {
case TAM_ELITE_COND: tamfont_z =TAM_PICA_COND; break;
case TAM_ELITE: tamfont_z =TAM_PICA; break;
}
graimpre->cambia_tamfont(tamfont_z); modo_z = PLANO; break;
case 'E': graimpre->font_bold_on(); modo_z = PLANO; break;
case 'F': graimpre->font_bold_off(); modo_z = PLANO; break;
case '0': graimpre->alto_z -= 2; MAX_LIN_X_PAG = 88; modo_z = PLANO; break;
case '1': graimpre->alto_z += 2; MAX_LIN_X_PAG = 66; modo_z = PLANO; break;
default : modo_z = PLANO; break;
}
break;
case SUBRAYADO:
switch(car_z) {
case '0': graimpre->font_underline_off(); modo_z = PLANO; break;
case '1': graimpre->font_underline_on(); modo_z = PLANO; break;
}
break;
}
}
graimpre->cierraimpre();
delete graimpre;
fclose(archin);
// -> Fin del Archivo
return (OK);
}
// ------------------------------------------


--- Imprigra.h
#ifndef IMPRI_GRAPH
#define IMPRI_GRAPH

#include <vcl.h>
#pragma hdrstop

int imprime_gra (String nomarch_z);
int manda_imp (String nomarch_z, String rutaimp_z, int tipoimp, int ff);
int imprime_txt (String nomarch_z, String rutaimp_z, int ff);


//---------------------------------------------------------------------------

#pragma package(smart_init)
#endif


--- impre.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "impre.h"
#include <Printers.hpp>
//---------------------------------------------------------------------------

#pragma package(smart_init)
//clase Timpre
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//constructor
__fastcall Timpre::Timpre()
{
AnsiString prop_z;
Prntr=Printer();
Prntr->Refresh();
Prntr->Title="Impresion";
prop_z="P.H:"+FormatFloat("0",Prntr->PageHeight);
prop_z=prop_z+" P.W:"+FormatFloat("0",Prntr->PageWidth);
prop_z=prop_z+" Impresora:"+Prntr->Printers->Strings[Prntr->PrinterIndex];
alto_z=Prntr->Canvas->TextHeight("W");
ancho_z=Prntr->Canvas->TextWidth("O");
margensup_z=alto_z*2;
altolin_z = alto_z;
espacol_z=ancho_z;
margenizq_z=ancho_z*2;
prop_z=prop_z+"\nAncho Car:"+FormatFloat("0",ancho_z);
prop_z=prop_z+" Alto Car:"+FormatFloat("0",alto_z);
// ShowMessage(prop_z);
lista_encol = new TList;
linenc_z = new TStringList;
linenc_z->Clear();
margeninf_z=Prntr->PageHeight - (alto_z*2);
Prntr->BeginDoc();
posy_z=margensup_z;
justenc_z=LINCEN;
}

//destructor
__fastcall Timpre::~Timpre()
{
// if ( Prntr ){ delete Prntr; Prntr = NULL; }
}
//---------------------------------------------------------------------------

void __fastcall Timpre::imprime_car(const char car)
{
int altotmp_z = 0;
String texto_z = car;
// ancho_z=Prntr->Canvas->TextWidth(texto_z);
Prntr->Canvas->TextOut(posx_z, posy_z, texto_z);
posx_z += ancho_z;
altotmp_z=Prntr->Canvas->TextHeight("O");
if(altotmp_z > altolin_z) altolin_z = altotmp_z;
}
//---------------------------------------------------------------------------

void __fastcall Timpre::alto_car()
{
int altotmp_z = 0;
altotmp_z=Prntr->Canvas->TextHeight("O");
if(altotmp_z > alto_z) alto_z = altotmp_z;
}
//---------------------------------------------------------------------------



void __fastcall Timpre::imprime_dato(const AnsiString texto_z, int columna_z, int justifica_z, bool borde_z)
{
int ancho_z, ii_z, inix_z=margenizq_z, sizetmp=0;
sizetmp = Prntr->Canvas->Font->Size;

if(posy_z > margeninf_z) saltapag();
for(ii_z=0; ii_z < columna_z; ii_z++) {
mi_encol = (LstEncol*) lista_encol->Items[ii_z];
inix_z=inix_z+mi_encol->anchopix+espacol_z;
}
mi_encol = (LstEncol*) lista_encol->Items[ii_z];
if(justifica_z != LINCEN && justifica_z != LINIZQ && justifica_z != LINDER ) {
Prntr->Canvas->Font->Size = mi_encol->Font->Size;
//Prntr->Canvas->Font->Name = mi_encol->Font->Name;
}
ancho_z = Prntr->Canvas->TextWidth(texto_z);
switch (justifica_z) {
case COLCEN: posx_z=inix_z+((mi_encol->anchopix -ancho_z)/2); break;
case COLIZQ: posx_z=inix_z; break;
case COLDER: posx_z=inix_z+mi_encol->anchopix-ancho_z; break;
case LINCEN: posx_z=margenizq_z+(Prntr->PageWidth-ancho_z)/2; break;
case LINIZQ: posx_z=margenizq_z; break;
case LINDER: posx_z=(margenizq_z+Prntr->PageWidth-ancho_z); break;
}
Prntr->Canvas->TextOut(posx_z, posy_z, texto_z);
if(borde_z) {
Prntr->Canvas->MoveTo(inix_z -2, posy_z -2);
Prntr->Canvas->LineTo(inix_z -2, posy_z + alto_z + 2);
Prntr->Canvas->MoveTo(inix_z -2, posy_z + alto_z + 2);
Prntr->Canvas->LineTo(inix_z + mi_encol->anchopix + 2, posy_z + alto_z + 2);
Prntr->Canvas->MoveTo(inix_z + mi_encol->anchopix + 2, posy_z + alto_z + 2);
Prntr->Canvas->LineTo(inix_z + mi_encol->anchopix + 2, posy_z + 2);
Prntr->Canvas->MoveTo(inix_z + mi_encol->anchopix + 2, posy_z + 2);
Prntr->Canvas->LineTo(inix_z -2, posy_z -2);
}
if(justifica_z != LINCEN && justifica_z != LINIZQ && justifica_z != LINDER ) {
//Prntr->Canvas->Font->Name = fontmp->Name;
Prntr->Canvas->Font->Size = sizetmp;
}
}

void __fastcall Timpre::saltalin()
{
if(altolin_z > alto_z)
posy_z=posy_z+altolin_z+2;
else
posy_z=posy_z+alto_z+2;
posx_z=margenizq_z;
altolin_z = 0;
}

void __fastcall Timpre::ljust(String texto, int col_z, bool borde_z)
{
if(col_z)
imprime_dato(texto, col_z, COLIZQ, borde_z);
else
imprime_dato(texto, col_z, LINIZQ, borde_z);
}

void __fastcall Timpre::rjust(String texto, int col_z, bool borde_z)
{
if(col_z)
imprime_dato(texto, col_z, COLDER, borde_z);
else
imprime_dato(texto, col_z, LINDER, borde_z);
}

void __fastcall Timpre::saltapag()
{
Prntr->NewPage(); posy_z=margensup_z; Encabezado();
}

void __fastcall Timpre::impenposx(const AnsiString texto_z, int posx_z)
{
Prntr->Canvas->TextOut(posx_z,posy_z,texto_z);
}

void __fastcall Timpre::cierraimpre()
{
Prntr->EndDoc();
}

int __fastcall Timpre::ancho(const AnsiString texto_z)
{
return(Prntr->Canvas->TextWidth(texto_z));
}

void __fastcall Timpre::Encol_Add(const AnsiString texto_z, int numcol_z,
int justifica_z, bool borde_z, int ancho_z)
{
mi_encol = new LstEncol;
mi_encol->encol=texto_z;
mi_encol->justcol=justifica_z;
mi_encol->numcol=numcol_z;
mi_encol->borde=borde_z;
mi_encol->ancho=ancho_z;
mi_encol->Font = new TFont();
mi_encol->Font->Name = Prntr->Canvas->Font->Name;
mi_encol->Font->Size = Prntr->Canvas->Font->Size;
mi_encol->anchopix=ancho(AnsiString::StringOfChar('O', ancho_z));
lista_encol->Add(mi_encol);
}

void __fastcall Timpre::Encabezado()
{
int ii_z=0;
// Prntr->Canvas->Font->Style = TFontStyles()<< fsBold << fsUnderline;
for(ii_z=0; ii_z < linenc_z->Count; ii_z++) {
imprime_dato(linenc_z->Strings[ii_z], 0, justenc_z, BORDE_OFF); saltalin();
}
for(ii_z=0; ii_z < lista_encol->Count; ii_z++) {
mi_encol = (LstEncol*) lista_encol->Items[ii_z];
imprime_dato(mi_encol->encol, mi_encol->numcol,mi_encol->justcol, mi_encol->borde);
}
saltalin();
// Prntr->Canvas->Font->Style = TFontStyles()<< fsBold << fsUnderline;
}

void __fastcall Timpre::cambia_tamfont(int tam_z)
{
Prntr->Canvas->Font->Size = tam_z;
ancho_z=Prntr->Canvas->TextWidth("O");
alto_z=Prntr->Canvas->TextHeight("O");
}

void __fastcall Timpre::cambia_nombrefont(String nombre_font_z)
{
int altotmp_z = 0;
Prntr->Canvas->Font->Name = nombre_font_z;
ancho_z=Prntr->Canvas->TextWidth("O");
altotmp_z=Prntr->Canvas->TextHeight("O");
}

void __fastcall Timpre::font_bold_on()
{
Prntr->Canvas->Font->Style = Prntr->Canvas->Font->Style << fsBold;
}

void __fastcall Timpre::font_bold_off()
{
Prntr->Canvas->Font->Style = Prntr->Canvas->Font->Style >> fsBold;
// Prntr->Canvas->Font->Style = TFontStyles() >> fsBold;
}

void __fastcall Timpre::font_underline_on()
{
Prntr->Canvas->Font->Style = Prntr->Canvas->Font->Style << fsUnderline;
}

void __fastcall Timpre::font_underline_off()
{
Prntr->Canvas->Font->Style = Prntr->Canvas->Font->Style >> fsUnderline;
}

void __fastcall Timpre::cam_tam_font_col(int col_z, int tam_z)
{
int tamfont_z;
// TFont *fontmp = new TFont();
// fontmp->Name=Prntr->Canvas->Font->Name;
// fontmp->Size=Prntr->Canvas->Font->Size;
mi_encol = (LstEncol*) lista_encol->Items[col_z];
mi_encol->Font->Size = tam_z;
tamfont_z = Prntr->Canvas->Font->Size;
Prntr->Canvas->Font->Size=mi_encol->Font->Size;
mi_encol->anchopix=Prntr->Canvas->TextWidth("O") * mi_encol->ancho;
Prntr->Canvas->Font->Size = tamfont_z;
// Prntr->Canvas->Font->Size=fontmp->Size;
// delete fontmp;
}

--- impre.h
//---------------------------------------------------------------------------

#ifndef impreH
#define impreH
//---------------------------------------------------------------------------
#include <Printers.hpp>
#define COLCEN 0
#define COLIZQ 1
#define COLDER 2
#define LINCEN 3
#define LINIZQ 4
#define LINDER 5
#define BORDE_ON true
#define BORDE_OFF false

//---------------------------------------------------------------------------
class Timpre {
public:
//dec's de constructor/destructor
__fastcall Timpre();
__fastcall ~Timpre();

//dec's de campos
TPrinter *Prntr;
int posx_z, posy_z, margenizq_z, margender_z, margensup_z,
margeninf_z, espacol_z, alto_z, altolin_z, ancho_z, justenc_z;
TStringList *linenc_z;
typedef struct {
AnsiString encol;
int numcol;
int justcol;
int inicol;
int ancho;
int anchopix;
bool borde;
TFont *Font;
} LstEncol;
TList *lista_encol;
LstEncol *mi_encol;
TCanvas *PrnCanvas;
void __fastcall imprime_dato(const AnsiString texto_z, int columna_z, int justifica_z, bool borde_z);
void __fastcall saltalin();
void __fastcall saltapag();
void __fastcall impenposx(const AnsiString texto_z, int posx_z);
void __fastcall cierraimpre();
int __fastcall ancho(const AnsiString texto_z);
void __fastcall Encol_Add(const AnsiString texto_z, int numcol_z, int justifica_z, bool borde_z, int ancho_z);
void __fastcall Encabezado();
void __fastcall ljust(String texto, int col_z, bool borde_z);
void __fastcall rjust(String texto, int col_z, bool borde_z);
void __fastcall cambia_tamfont(int tam_z);
void __fastcall cam_tam_font_col(int col_z, int tam_z);
void __fastcall cambia_nombrefont(String nombre_font_z);
void __fastcall imprime_car(const char car);
void __fastcall font_bold_on();
void __fastcall font_bold_off();
void __fastcall font_underline_on();
void __fastcall font_underline_off();
void __fastcall alto_car();

};
extern Timpre Impre;
#endif



y solo tienes que incluir
#include "imprigra.h"

en tu programa, y para imprimir haces llamada a:
manda_imp(arch_z, dm->rutaimp_z, dm->tipoimp_z, dm->ff_z);

donde arch_z es el archivo que quieres imprimir,
rutaimp_z es la ruta del puerto al que lo quieres mandar, por ej: \\lpt1
ff_z es un bool que indica si hace salto de pagina pues al mandarlo no hace salto de pagina despues de imprimir y para hacer el salto de pagina copia el archiv \windows\ff.txt que solo contiene un chr(12) al puerto que dice rutaimp_z



Espero que te sirva
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.