Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1028 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Imprimer in fichier sous Windows

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Imprimer in fichier sous Windows

n°1663965
aurey
Posté le 29-12-2007 à 17:43:51  profilanswer
 

Salut à tous
 
J'aimerais trouver le moyen d'imprimer du texte en C...
 
J'ai déjà fais des recherches et j'ai trouvé ces codes :

Code :
  1. FILE *imprim;
  2. imprim=fopen("PRN","wt" );
  3. fprintf(imprim,"Exemple d'impression!\n" );
  4. fclose(imprim);


Résultat ==> Ecran noir pendant environ 30 secondes, puis le programme s'arrete sans avoir imprimer.
 

Code :
  1. fprintf(stdprn,"Mon texte à imprimer: %s","le text" );


Résultat ==> Erreur lors de la compilation, mais d'après ce que j'ai pu lire sur internet cette fonction est dépassé, donc plus utilisé...
 

Code :
  1. FILE *fp;
  2. int c;
  3. if (argc != 2) /* un seul paramètre ! */
  4. {
  5. printf("Syntaxe : printfl fichier\n" );
  6. exit(1);
  7. }
  8. if ((fp = fopen(argv[1], "r" )) == NULL)
  9. {
  10. printf("Impossible d'ouvrir le fichier %s.\n", argv[1]);
  11. exit(2);
  12. }
  13. while ((c = fgetc(fp)) != EOF) 
  14. fputc("essai", stdin);


Résultat ==> Le programme compile mais ce referme tout de suite sans imprimer.
 

Code :
  1. *stream;
  2. stream = fopen("PRN", "w" );
  3. fprintf(stream, "a line of text\n" );


Résultat ==> Le programme compile mais ce referme tout de suite sans imprimer.
 

Code :
  1. system("print test.txt" );

 
Résultat ==> Assez bon...le programme ce lance trouve le fichier et met impression en cour...puis 30 secondes aprés le programme s'arrete san avoir imprimer...
 
 
Es que quelq'un à une solution?
 
 
Merci d'avance.  
 
PS = Je précise que c'est dans le but de réaliser un éditeur de texte, dans je ne peut pas passer par le bloc note ou autre...

mood
Publicité
Posté le 29-12-2007 à 17:43:51  profilanswer
 

n°1663979
breizhbugs
Posté le 29-12-2007 à 18:17:15  profilanswer
 

M'est avis que tu devrais utiliser les fonctions d'impression propre a windows pour avoir un minimum de choix (configuration de l'impression, choix de l'imprimante, etc...)
http://msdn2.microsoft.com/en-us/l [...] S.85).aspx

n°1663983
aurey
Posté le 29-12-2007 à 18:27:33  profilanswer
 

MERCI beaucoup pour le lien!
 
La description que tu as faite est exactement ce que je cherche, mais malheresement je n'ai pas tout compris sur le lien que tu m'as donné...
 
Aurais tu un petit exemple de code?
 
 
Merci
Je continu à regarder ton lien...

n°1664012
breizhbugs
Posté le 29-12-2007 à 20:22:54  profilanswer
 

Euh non désolé, je n'ai pas d'exemple...
(ci peut etre un petit exemple: http://www.gidforums.com/t-6872.html )
 
Sinon au lieu d'utiliser fopen("PRN", ...) as tu essayé fopen("LPT1",...)

n°1664023
aurey
Posté le 29-12-2007 à 23:35:46  profilanswer
 

Oui j'ai essayé mais ça ne marche pas...
Enfin je réessayerais demain...
 
Sinon le lien que tu m'as donné c'est du C++ non ( "cpp" )?
 
 
 
Merci

n°1664057
aurey
Posté le 30-12-2007 à 10:03:31  profilanswer
 

Ok bon j'ai obtenue ce code :
 

Code :
  1. #include <stdio.h>
  2. #include <conio2.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <windows.h>
  6. void PageGDICalls (HDC, int, int) ;
  7. LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
  8. BOOL PrintMyPage (HWND) ;
  9. extern HINSTANCE hInst ;
  10. extern TCHAR     szAppName[] ;
  11. extern TCHAR     szCaption[] ;     // in PRINT.C
  12. HDC  GetPrinterDC (void) ;              // in GETPRNDC.C
  13. main(int argc, char **argv)
  14. {
  15. HINSTANCE hInst ;
  16. TCHAR     szAppName[] = TEXT ("Print1" ) ;
  17. TCHAR     szCaption[] = TEXT ("Print Program 1" ) ;
  18. BOOL PrintMyPage (HWND hwnd)
  19. {
  20.      static DOCINFO di = { sizeof (DOCINFO), TEXT ("Print1: Printing" ) } ;
  21.      BOOL           bSuccess = TRUE ;
  22.      HDC            hdcPrn ;
  23.      int            xPage, yPage ;
  24.    
  25.      if (NULL == (hdcPrn = GetPrinterDC ()))
  26.           return FALSE ;
  27.      xPage = GetDeviceCaps (hdcPrn, HORZRES) ;
  28.      yPage = GetDeviceCaps (hdcPrn, VERTRES) ;
  29.    
  30.      if (StartDoc (hdcPrn, &di) > 0)
  31.      {
  32.           if (StartPage (hdcPrn) > 0)
  33.           {
  34.                PageGDICalls (hdcPrn, xPage, yPage) ;
  35.              
  36.                if (EndPage (hdcPrn) > 0)
  37.                     EndDoc (hdcPrn) ;
  38.                else
  39.                     bSuccess = FALSE ;
  40.           }
  41.      }
  42.      else
  43.           bSuccess = FALSE ;
  44.    
  45.      DeleteDC (hdcPrn) ;
  46.      return bSuccess ;
  47. }
  48. system ("PAUSE" );
  49. return 0;
  50. }
  51. HDC GetPrinterDC (void)
  52. {
  53.      DWORD            dwNeeded, dwReturned ;
  54.      HDC              hdc ;
  55.      PRINTER_INFO_4 * pinfo4 ;
  56.      PRINTER_INFO_5 * pinfo5 ;
  57.  DWORD pcchBuffer;
  58.  OSVERSIONINFO osver;
  59.  osver.dwOSVersionInfoSize =sizeof(OSVERSIONINFO);
  60.  GetVersionEx(&osver);
  61.      if (GetVersion () & 0x80000000)         // Windows 98
  62.      {
  63.           EnumPrinters (PRINTER_ENUM_DEFAULT, NULL, 5, NULL,
  64.                         0, &dwNeeded, &dwReturned) ;
  65.           pinfo5 = (PRINTER_INFO_5*)malloc (dwNeeded) ;
  66.           EnumPrinters (PRINTER_ENUM_DEFAULT, NULL, 5, (PBYTE) pinfo5,
  67.                         dwNeeded, &dwNeeded, &dwReturned) ;
  68.           hdc = CreateDC (NULL, pinfo5->pPrinterName, NULL, NULL) ;
  69.           free (pinfo5) ;
  70.      }
  71.  else if(osver.dwMinorVersion==1){ //windows XP
  72.   GetDefaultPrinter(NULL,&pcchBuffer);
  73.   TCHAR* pszBuffer = new TCHAR[pcchBuffer];   // printer name buffer
  74.   GetDefaultPrinter(pszBuffer,&pcchBuffer);
  75.   hdc = CreateDC (NULL, pinfo4->pPrinterName, NULL, NULL) ;
  76.  }
  77.      else                                    // Windows NT
  78.      {
  79.           EnumPrinters (PRINTER_ENUM_LOCAL, NULL, 4, NULL,
  80.                         0, &dwNeeded, &dwReturned) ;
  81.           pinfo4 = (PRINTER_INFO_4*)malloc (dwNeeded) ;
  82.           EnumPrinters (PRINTER_ENUM_LOCAL, NULL, 4, (PBYTE) pinfo4,
  83.                         dwNeeded, &dwNeeded, &dwReturned) ;
  84.           hdc = CreateDC (NULL, pinfo4->pPrinterName, NULL, NULL) ;
  85.           free (pinfo4) ;
  86.      }
  87.      return hdc ; 
  88. }
  89. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  90.                     PSTR szCmdLine, int iCmdShow)
  91. {
  92.      HWND     hwnd ;
  93.      MSG      msg ;
  94.      WNDCLASS wndclass ;
  95.    
  96.      wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
  97.      wndclass.lpfnWndProc   = WndProc ;
  98.      wndclass.cbClsExtra    = 0 ;
  99.      wndclass.cbWndExtra    = 0 ;
  100.      wndclass.hInstance     = hInstance ;
  101.      wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
  102.      wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  103.      wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
  104.      wndclass.lpszMenuName  = NULL ;
  105.      wndclass.lpszClassName = szAppName ;
  106.    
  107.      if (!RegisterClass (&wndclass))
  108.      {
  109.           MessageBox (NULL, TEXT ("This program requires Windows NT!" ),
  110.                       szAppName, MB_ICONERROR) ;
  111.           return 0 ;
  112.      }
  113.    
  114.      hInst = hInstance ;
  115.    
  116.      hwnd = CreateWindow (szAppName, szCaption,
  117.                           WS_OVERLAPPEDWINDOW,
  118.                           CW_USEDEFAULT, CW_USEDEFAULT,
  119.                           CW_USEDEFAULT, CW_USEDEFAULT,
  120.                           NULL, NULL, hInstance, NULL) ;
  121.    
  122.      ShowWindow (hwnd, iCmdShow) ;
  123.      UpdateWindow (hwnd) ;
  124.    
  125.      while (GetMessage (&msg, NULL, 0, 0))
  126.      {
  127.           TranslateMessage (&msg) ;
  128.           DispatchMessage (&msg) ;
  129.      }
  130.      return msg.wParam ;
  131. }
  132. void PageGDICalls (HDC hdcPrn, int cxPage, int cyPage)
  133. {
  134.      static TCHAR szTextStr[] = TEXT ("Hello, Printer!" ) ;
  135.    
  136.      Rectangle (hdcPrn, 0, 0, cxPage, cyPage) ;
  137.    
  138.      MoveToEx (hdcPrn, 0, 0, NULL) ;
  139.      LineTo   (hdcPrn, cxPage, cyPage) ;
  140.      MoveToEx (hdcPrn, cxPage, 0, NULL) ;
  141.      LineTo   (hdcPrn, 0, cyPage) ;
  142.    
  143.      SaveDC (hdcPrn) ;
  144.    
  145.      SetMapMode       (hdcPrn, MM_ISOTROPIC) ;
  146.      SetWindowExtEx   (hdcPrn, 1000, 1000, NULL) ;
  147.      SetViewportExtEx (hdcPrn, cxPage / 2, -cyPage / 2, NULL) ;
  148.      SetViewportOrgEx (hdcPrn, cxPage / 2,  cyPage / 2, NULL) ;
  149.    
  150.      Ellipse (hdcPrn, -500, 500, 500, -500) ;
  151.    
  152.      SetTextAlign (hdcPrn, TA_BASELINE | TA_CENTER) ;
  153.      TextOut (hdcPrn, 0, 0, szTextStr, lstrlen (szTextStr)) ;
  154.      RestoreDC (hdcPrn, -1) ;
  155. }
  156. LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  157. {
  158.      static int   cxClient, cyClient ;
  159.      HDC          hdc ;
  160.      HMENU        hMenu ;
  161.      PAINTSTRUCT  ps ;
  162.    
  163.      switch (message)
  164.      {
  165.      case WM_CREATE:
  166.           hMenu = GetSystemMenu (hwnd, FALSE) ;
  167.           AppendMenu (hMenu, MF_SEPARATOR, 0, NULL) ;
  168.           AppendMenu (hMenu, 0, 1, TEXT ("&Print" )) ;
  169.           return 0 ;
  170.          
  171.      case WM_SIZE:
  172.           cxClient = LOWORD (lParam) ;
  173.           cyClient = HIWORD (lParam) ;
  174.           return 0 ;
  175.          
  176.      case WM_SYSCOMMAND:
  177.           if (wParam == 1)
  178.           {
  179.                if (!PrintMyPage (hwnd))
  180.                     MessageBox (hwnd, TEXT ("Could not print page!" ),
  181.                                 szAppName, MB_OK | MB_ICONEXCLAMATION) ;
  182.                return 0 ;
  183.           }
  184.           break ;
  185.          
  186.      case WM_PAINT :
  187.           hdc = BeginPaint (hwnd, &ps) ;
  188.          
  189.           PageGDICalls (hdc, cxClient, cyClient) ;
  190.          
  191.           EndPaint (hwnd, &ps) ;
  192.           return 0 ;
  193.          
  194.      case WM_DESTROY :
  195.           PostQuitMessage (0) ;
  196.           return 0 ;
  197.      }
  198.      return DefWindowProc (hwnd, message, wParam, lParam) ;
  199. }


 
Mais j'ai une erreur sur cette ligne :

Code :
  1. TCHAR* pszBuffer = new TCHAR[pcchBuffer];   // printer name buffer


erreur : `new' undeclared (first use in this function)  
Je vois pas l'erreur, je voie même pas ou elle est déclarer!C'est peut-être ça justement l'erreur?
 
 
 
Merci

n°1664070
breizhbugs
Posté le 30-12-2007 à 11:54:29  profilanswer
 

new/delete, c'est du cplusplus, remplace par malloc/free

n°1664370
aurey
Posté le 01-01-2008 à 00:41:47  profilanswer
 

Merci beaucoup!
 
Mais peut tu détailelr un peu ce que tu veux dire, je croi que je n'ai pas trés bien compris?
Je remplace juste les mots?
 
 
Sinon personne à plus simple?
 
 
 
merci

n°1664399
breizhbugs
Posté le 01-01-2008 à 11:23:34  profilanswer
 

remplace
TCHAR* pszBuffer = new TCHAR[pcchBuffer];
par il me semble:
TCHAR* pszBuffer = (TCHAR *) malloc(pcchBuffer);

n°1664416
aurey
Posté le 01-01-2008 à 13:17:14  profilanswer
 

Salut
 
Merci beaucoup!
 
Bon le programme ne compile toujours pas...
Il me dit qu'il y a plein de fonctions non trouvées, comme ci je n'avais pas inclue une librairie...
 
Voila ce que j'ai inclue :

Code :
  1. #include <stdio.h>
  2. #include <conio2.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <windows.h>


 
 
Merci d'avance

mood
Publicité
Posté le 01-01-2008 à 13:17:14  profilanswer
 

n°1664443
Emmanuel D​elahaye
C is a sharp tool
Posté le 01-01-2008 à 16:34:07  profilanswer
 

aurey a écrit :

Il me dit qu'il y a plein de fonctions non trouvées, comme ci je n'avais pas inclue une librairie...


"inclue une librairie" Qu'est-ce que ça peut bien vouloir dire ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1664818
you_801204
Réparateur pc portable
Posté le 02-01-2008 à 16:02:46  profilanswer
 

Salut.
 
Les premiers codes sont corrects, et le résultat est bon. Il faut seulement trouver le fichier "PRN" dans le même endroit de le .exe fichier.
 
Code :
   1. FILE *imprim;
   2. imprim=fopen("PRN","wt" );
   3. fprintf(imprim,"Exemple d'impression!\n" );
   4. fclose(imprim);
Résultat ==> Ecran noir pendant environ 30 secondes, puis le programme s'arrete sans avoir imprimer.

Message cité 1 fois
Message édité par you_801204 le 02-01-2008 à 16:03:48
n°1664852
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-01-2008 à 16:56:27  profilanswer
 

you_801204 a écrit :

Salut.
 
Les premiers codes sont corrects, et le résultat est bon. Il faut seulement trouver le fichier "PRN" dans le même endroit de le .exe fichier.


Ah ? Tu crois que "PRN" est un fichier...
 
http://support.microsoft.com/kb/60203/fr
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1664875
you_801204
Réparateur pc portable
Posté le 02-01-2008 à 17:40:57  profilanswer
 

Oh! Merci, Emmanuel Delahaye. C'est ma imprimante. "PRN" est pour LPT1, qui est le connecteur entre l'ordi et l'imprimante. Donc les messages sont soumis vers LPT1.
 
Si pour enregistrer des messages en fichier, on peut remplacer "PRN" de un nom comme "resultat.txt".


---------------
Pierre Electro-Info http://porte-d-orleans.reparation-paris.fr/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Imprimer in fichier sous Windows

 

Sujets relatifs
problèmes lecture d'un fichier texteBatch pour fermer Windows Media Player
script PHP / service WindowsGénération fichier textes formatés depuis VB Excel
[IIS/Javascript] Problème de fichier .js[langage C] Exercice déplacement et renommer fichier
[Resolu] [Problème] [Perl,Tableaux] lire un fichier texteProblème installation Oracle 10g sous Windows Vista
[C#] Problème d'emulation sur Visual Studio (Windows CE 5.0)fichier batch
Plus de sujets relatifs à : Imprimer in fichier sous Windows


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR