PDA

View Full Version : [C++]Stampare files


Kleidemos
21-05-2003, 20:44
Come stampo un files???

maxithron
21-05-2003, 21:48
devi stampare il contenuto di un files oppure l'output che ti restituisce?

cionci
21-05-2003, 23:35
Stampare files in genere dipende dal routine messe a disposizione dal sistema operativo...

Kleidemos
22-05-2003, 05:32
Originally posted by "maxithron"

devi stampare il contenuto di un files oppure l'output che ti restituisce?

il contenuto!
Sto creando un engine , in C++ standard x portabilita, x un editor.

P.S: c'è pure un mio post a riguardo

misterx
22-05-2003, 09:10
#include <stdio.h>
#include <stdlib.h>

main()
{

FILE *fp;
FILE *st;

char buf[256];

st = fopen("LPT1","w");
if(!st) {// problemi}

fp = fopen("miofile.txt","r");
if(!fp) {// problemi}

// leggo da file e stampo
while(fgets(buf,sizeof(buf),fp) != NULL)
fprintf(st,"%s",buf);

fclose(fp); // chiudo file
fclose(st); // chiudo stampante

}

cionci
22-05-2003, 09:50
Comunque non è codice portabile...e non funziona su tutte le stampanti...

Kleidemos
22-05-2003, 12:44
risolto:

void Engine::Print()
{
#if defined(WIN32)
#define PRINT "PRINT"
#elif defined(POSIX)
#define PRINT "lpr"
#else
#error Unknow Operating Sistem
#endif
#define FILE_TO_PRINT _filename
system("PRINT FILE_TO_PRINT");
}

cionci
22-05-2003, 14:45
Attento che con una stampante "Windows only" la stampa con print non funziona (purtroppo)...

Kleidemos
22-05-2003, 14:46
Originally posted by "cionci"

Attento che con una stampante "Windows only" la stampa con print non funziona (purtroppo)...

cazz!
Ma sono tanto diffuse?

cionci
22-05-2003, 14:58
La mia laser lo è :mad:

Comuqnue puoi usare le API di Windows...

void engine::print()
{
#ifdef WIN32
//usi le API Win32
#else
//fai al stampa con lpr (sempre che sia un testo solamente)
#endif
}

Kleidemos
22-05-2003, 15:43
qual' è l'API?

:pig:

cionci
22-05-2003, 15:51
Quali sono semmai... Un bel po'...

PRINTDLG pd;
DOCINFO di;

ZeroMemory(&pd,sizeof (PRINTDLG)) ;

pd.lStructSize = sizeof (PRINTDLG);
pd.Flags = PD_ALLPAGES | PD_COLLATE | PD_RETURNDC |PD_USEDEVMODECOPIESANDCOLLATE | PD_HIDEPRINTTOFILE | PD_NOSELECTION;
pd.nCopies = 1;

di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "Stampa orario";
di.lpszOutput = NULL;
di.lpszDatatype= NULL;
di.fwType = 0;

if(PrintDlg(&pd)!=0)
{
StartDoc(pd.hDC,&di);
StartPage(pd.hDC);

int y = GetDeviceCaps(pd.hDC, VERTRES)/55; //infilo 55 righe in una pagina
TextOut(pd.hDC,x,y,(LPCTSTR)"ciao",4);

EndPage(pd.hDC);
EndDoc(pd.hDC);
}

DeleteDC(pd.hDC);

Louder Than Hell
19-06-2003, 10:41
Originally posted by "misterx"

#include <stdio.h>
#include <stdlib.h>

main()
{

FILE *fp;
FILE *st;

char buf[256];

st = fopen("LPT1","w");
if(!st) {// problemi}

fp = fopen("miofile.txt","r");
if(!fp) {// problemi}

// leggo da file e stampo
while(fgets(buf,sizeof(buf),fp) != NULL)
fprintf(st,"%s",buf);

fclose(fp); // chiudo file
fclose(st); // chiudo stampante

}

in c++ dovrebbe essere
void stampa(){
ofstream stampante("LPT1");
ifstream in("file.txt");
while(in.get(ch)){
stampante<<ch;
}
stampante.close();
in.close();
}
??? Funziona però appena finisce di stampare non fa uscire tutto il foglio che deve essere estratto manualmente :cry:

misterx
19-06-2003, 12:54
prova ad inviare invia un 'LF' :)

cionci
19-06-2003, 14:09
Semmai un FF...Form Feed...però non mi ridordo il carattere da scrivere sulla porta...

Louder Than Hell
19-06-2003, 14:53
stampante<<ff? :confused:

Scusate ma non posso provarli direttamente perchè ho incasinato un pò il programma e adesso devo rimetterlo apposto! :muro:

cionci
19-06-2003, 16:59
Non mi ricordo il valore del form feed...ma era uno dei primi...un attimo che cerco...

cionci
19-06-2003, 17:04
stampante << (char)0x0C;

misterx
19-06-2003, 19:02
Originally posted by "cionci"

Semmai un FF...Form Feed...però non mi ridordo il carattere da scrivere sulla porta...


bravo, non mi ricordavo più Form Feed=sputa il foglio :D

Louder Than Hell
19-06-2003, 22:30
Bene grazie mille ho finito tutto!

Adesso dovrei implementare la ricerca per nome invece che per id ma non riesco ad usare getline e la stampa di un singolo id o di più id. Ormai ho il cervello fuso lo farò un altra volta :muro:




EDIT:ripensandoci...potri farlo anche con get e basta ma non ne ho la minima voglia in questo momento! :D


Grazie ancora ciau!