Ir ao conteúdo

usar a impressora


Cambalinho

Posts recomendados

Postado

como posso enviar o texto(para testar):

"hello world"

para a impressora?

o livro Linguagem C falou na funçao fprintf():

#include <stdio.h>

int main()
{
fprintf(stdprn,"Hello Wordl\n");
return 0;
}

mas o Visual C++ 6 não reconhece 'stdprn'(e ja tentei 'STDPRN'):(

(mas reconhece 'stdout')

alguem me pode explicar o que estou a fazer mal?

Postado

Encontrei esse exemplo:


FILE *impressora = NULL;

impressora = fopen("PRN", "w");

fprintf(impressora, "Hello World");
fclose(impressora);

Não funcionou no MinGW.

A abertura funciona e a função "fprintf()" também, porém, a impressora não responde e não fecha o arquivo. A partir daí, a execução congela.

Talvez funcione no Visual C++ 6.

Fonte: http://www.forum-invaders.com.br/vb/showthread.php/20869-Enviando-textos-para-a-impressora-em-C

Postado
Encontrei esse exemplo:


FILE *impressora = NULL;

impressora = fopen("PRN", "w");

fprintf(impressora, "Hello World");
fclose(impressora);

Não funcionou no MinGW.

A abertura funciona e a função "fprintf()" também, porém, a impressora não responde e não fecha o arquivo. A partir daí, a execução congela.

Talvez funcione no Visual C++ 6.

Fonte: http://www.forum-invaders.com.br/vb/showthread.php/20869-Enviando-textos-para-a-impressora-em-C

desculpa mas n funciona. o windows da-me erro porque o ponteiro é NULL;)

Postado

Aqui eu consegui imprimir mandando para LPT1 na minha paralela LX-300 (matricial).

(Ambiente MinGW)

No caso da jato de tinta, eu até consigo enviar o texto para a fila de impressão, mas com erro (note o número de bytes enviados..):

vdo1u0.png

Certamente a impressora não entende os caracteres enviados. Se tivesse alguma coisa intermediária que fizesse essa tradução para o formato aceito pela impressora, então daria para imprimir. Algo que fosse bem semelhante ao Ghostscript.

Isso para forçar a impressão desse jeito. Para imprimir no Windows nativamente, a saída mais efetiva (e bem trabalhosa) seria pelas funções da API: http://msdn.microsoft.com/en-us/library/gg263344%28v=vs.85%29.aspx

[]'s

LNW

Postado
Aqui eu consegui imprimir mandando para LPT1 na minha paralela LX-300 (matricial).

(Ambiente MinGW)

No caso da jato de tinta, eu até consigo enviar o texto para a fila de impressão, mas com erro (note o número de bytes enviados..):

vdo1u0.png

Certamente a impressora não entende os caracteres enviados. Se tivesse alguma coisa intermediária que fizesse essa tradução para o formato aceito pela impressora, então daria para imprimir. Algo que fosse bem semelhante ao Ghostscript.

Isso para forçar a impressão desse jeito. Para imprimir no Windows nativamente, a saída mais efetiva (e bem trabalhosa) seria pelas funções da API: http://msdn.microsoft.com/en-us/library/gg263344%28v=vs.85%29.aspx

[]'s

LNW

com mais alguma pesquisa cheguei a este site: http://win32-framework.sourceforge.net/Tutorials/tutorial9.htm

e fiz este codigo:

#include <stdio.h>
#include <windows.h>
#include <string.h>

void printer(char text[])
{

// Bring up a dialog to choose the printer
PRINTDLG pd = {0};
pd.lStructSize = sizeof( pd );
pd.Flags = PD_RETURNDC;
pd.nCopies=1;

// Show the printer Dialog
PrintDlg( &pd );


// Zero and then initialize the members of a DOCINFO structure.
DOCINFO di = {0};
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "Scribble Printout";
di.lpszOutput = (LPTSTR) NULL;
di.lpszDatatype = (LPTSTR) NULL;
di.fwType = 0;

// Begin a print job by calling the StartDoc function.
StartDoc(pd.hDC, &di);

// Inform the driver that the application is about to begin sending data.
StartPage(pd.hDC);

//here we put images\text or other DC things;)

//send some text
TextOut(pd.hDC,800,800,text, strlen(text));


//Lets close the printer
// Inform the driver that the page is finished.
EndPage(pd.hDC);

// Inform the driver that document has ended.
EndDoc(pd.hDC);
}

int main ()
{
printer("Hello world");
return 0;
}

1 questao: como posso alterar este codigo para nao precisar de mostrar a janela de impressao?

(nao tenho como testar, porque estou sem tinta nos tinteiros. mas funciona com a janela de impressao.. porque isso ja testei enviando para outra 'impressora'(para meter em pdf))

Postado

Cambalinho,

1 questao: como posso alterar este codigo para nao precisar de mostrar a janela de impressao?

(nao tenho como testar, porque estou sem tinta nos tinteiros. mas funciona com a janela de impressao.. porque isso ja testei enviando para outra 'impressora'(para meter em pdf))

A qual janela você se refere? Ao diálogo para escolha da impressora? Se for, você adiciona a flag:

pd.Flags = [B]PD_RETURNDEFAULT[/B] | PD_RETURNDC;

E vai imprimir na impressora padrão selecionada no sistema.

[]'s

LNW

Postado
Cambalinho,

A qual janela você se refere? Ao diálogo para escolha da impressora? Se for, você adiciona a flag:

pd.Flags = [B]PD_RETURNDEFAULT[/B] | PD_RETURNDC;

E vai imprimir na impressora padrão selecionada no sistema.

[]'s

LNW

com ajuda daquela pagina fiz 1 funçao, mas eu ainda nao aprendi como se returna valores de estrura em funçoes(ainda estou aprender ficheiros). mas como retorno os valores?

RECT ConvertingRECPixelToCharacter(HDC Source, HDC Destination, RECT Positions)
{
// Determine the scaling factors required retain the bitmap's original proportions.
float fLogPelsX1 = (float) GetDeviceCaps(Source, LOGPIXELSX);
float fLogPelsY1 = (float) GetDeviceCaps(Source, LOGPIXELSY);
float fLogPelsX2 = (float) GetDeviceCaps(Destination, LOGPIXELSX);
float fLogPelsY2 = (float) GetDeviceCaps(Destination, LOGPIXELSY);
float fScaleX = max(fLogPelsX1, fLogPelsX2) / min(fLogPelsX1, fLogPelsX2);
float fScaleY = max(fLogPelsY1, fLogPelsY2) / min(fLogPelsY1, fLogPelsY2);

// Compute the coordinates of the upper left corner of the centered bitmap.
int cWidthPels = GetDeviceCaps(Destination, HORZRES);
int xLeft = ((cWidthPels / 2) - ((int) (((float) (Positions.right-Positions.left)) * fScaleX)) / 2);
int cHeightPels = GetDeviceCaps(Destination, VERTRES);
int yTop = ((cHeightPels / 2) - ((int) (((float) (Positions.bottom-Positions.top)) * fScaleY)) / 2);

}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!