Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Printing directly to a network printer

Îåêßíçóå áðü ôï ìÝëïò dkou. Τελευταία δημοσίευση από το μέλος dkou στις 10-05-2007, 01:05. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  08-05-2007, 19:50 31608

    Printing directly to a network printer

    Στο βιβλίο “.net compact framework programming with cSharp” υπάρχει η παρακάτω  μέθοδος για εκτύπωση σε network printer με sockets. Δουλεύει μια χαρά με τον posiflex θερμικό receipt printer που έχω. Δεν μπορεί όμως να τυπώσει Ελληνικούς χαρακτήρες παρόλο που το Dell Axim με Windows CE 5 διαθέτει Ελληνικά. Φαντάζομαι, αυτό έχει να κάνει με την συγκεκριμένη υλοποίηση και ψάχνω να βρω μια λύσει.

     

    Ψάχνω να βρω έναν τρόπο να τυπώνω από το PDA στον Posiflex network receipt printer, Ελληνικά. Με την χρήση του Printer CE και λοιπών εφαρμογών δεν έχω θετικό αποτέλεσμα.

     

    Κάθε βοήθεια ευπρόσδεκτη

     

    Ευχαριστώ

     

    ---------

    Listing 17.5. Direct Printing to an IP Printer (from PrintJob_Socket.ca)
    public class PrintJob_Socket
    {
       private const byte CR = 0x0a;
       private const byte LF = 0x0d;
       private const byte FF = 0x0c;
    
       //--------------------------------------------------------
       //--------------------------------------------------------
       public static void PrintText(TextBox textIn, string strPort)
       {
          // Split the input data into separate lines of text.
          char [] achNewLine = new char[] { '\n' };
          String [] astrSplit;
          astrSplit = textIn.Text.Split(achNewLine);
    
          // Calculate the longest string in the document.
          int cchMax = 0;
          int cstr = astrSplit.Length;
          for (int i = 0; i < cstr; i++)
          {
             if (astrSplitIdea.Length > cchMax)
                cchMax = astrSplitIdea.Length;
          }
    
          // Allocate the conversion buffer.
          byte[] byteData = new Byte[cchMax];
          char[] chData = new Char[cchMax];
          System.Text.Encoder d;
          d = System.Text.Encoding.UTF8.GetEncoder();
    
          Socket s = null;
    
          try
          {
             // Connect to the printer.
             s = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.IP);
             IPAddress addr = IPAddress.Parse(strPort);
             IPEndPoint ipep = new IPEndPoint(addr, 9100);
             s.Connect(ipep);
          // Loop through the list of strings.
          for (int i = 0; i < cstr; i++)
          {
              int cch = astrSplitIdea.Length;
              if (cch > 0)
              {
                 chData = astrSplitIdea.ToCharArray();
    
                 // Convert the Unicode string to UTF-8 encoding.
                 d.GetBytes(chData, 0, cch, byteData, 0, true);
    
                 // Output the bytes to the printer.
                 s.Send(byteData,0, cch,SocketFlags.None);
                }
    
                // Put a carriage return at the line end.
                byte[] byteCrLf = new byte[] { CR };
                s.Send(byteCrLf,0, 1,SocketFlags.None);
             }
    
             // Put a form feed at the end of the document.
             byte[] byteFF = new byte[] { FF };
             s.Send(byteFF,0, 1,SocketFlags.None);
          }
          finally
          {
             s.Close();
          }
       }
    
       //--------------------------------------------------------
       public static bool IsIPAddress(string strIn)
       {
          bool bRetVal = true;
          try
          {
             IPAddress.Parse(strIn);
          }
          catch
    
          {
             bRetVal = false;
          }
    
          return bRetVal;
       }
    
    } // class
    
  •  09-05-2007, 14:15 31636 σε απάντηση της 31608

    Απ: Printing directly to a network printer

    Απ’ ότι καταλαβαίνω, για να τυπώσω Ελληνικά θα πρέπει να κάνω render το κείμενο που θέλω να τυπώσω (GDI) και μετά να το στείλω στον IP Printer. Το έχει κάνει κανείς άλλος αυτό ?

  •  09-05-2007, 16:00 31642 σε απάντηση της 31636

    Απ: Printing directly to a network printer

    Ο κώδικας που δείχνεις μετατρέπει το κείμενο σε UTF8 πριν το στείλει στον εκτυπωτή. Αν ο εκτυπωτής σου δεν καταλαβαίνει από UTF8, δεν πρόκειται να τυπώσει σωστά. Πρώτα θα πρέπει να μετατρέψεις τα strings στο encoding που καταλαβαίνει ο εκτυπωτής. Αντί δηλαδή να γράψεις d = System.Text.Encoding.UTF8.GetEncoder(); θα βάλεις το Encoding που περιμένει ο εκτυπωτής για τα Ελληνικά. Ο εκτυπωτής όμως θα πρέπει να έχει ήδη ρυθμιστεί για να δέχεται το συγκεκριμένο codepage, είτε μέσω dip switch είτε στέλνοντας τα κατάλληλα escape sequences.

    H μέθοδος εκτύπωσης που χρησιμοποιείς παρακάμπτει εντελώς τους printer drivers και είναι κατάλληλη μόνο για εκτύπωση κειμένου. Συνεπώς, δεν παίζει κανένα ρόλο το GDI.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  09-05-2007, 16:31 31643 σε απάντηση της 31642

    Απ: Printing directly to a network printer

    Παναγιώτη σε ευχαριστώ πολύ για την απάντηση σου και είναι απόλυτα κατανοητή.

     

    Ο στόχος μου είναι να καταφέρω να τυπώσω Ελληνικό κείμενο από ένα PDA (Dell Axim) σε έναν receipt printer (POSIFLEX aura) μέσω TCP/IP. Καταλαβαίνω ότι ο εκτυπωτής δεν καταλαβαίνει Ελληνικά.

    Θεωρείς ότι μπορώ να μετατρέψω κείμενο σε γραφικά και να τα στείλω TCP/IP στον εκτυπωτή χωρίς οδηγό?

     

    Ας πούμε ότι ξέρω το Ελληνικό codetable (HEX) για τον εκτυπωτή . Πως θα κάνω την μετάφραση πάνω στον κώδικα ?

     

    Σε ευχαριστώ

    Παναγιώτης Καναβός:

    Ο κώδικας που δείχνεις μετατρέπει το κείμενο σε UTF8 πριν το στείλει στον εκτυπωτή. Αν ο εκτυπωτής σου δεν καταλαβαίνει από UTF8, δεν πρόκειται να τυπώσει σωστά. Πρώτα θα πρέπει να μετατρέψεις τα strings στο encoding που καταλαβαίνει ο εκτυπωτής. Αντί δηλαδή να γράψεις d = System.Text.Encoding.UTF8.GetEncoder(); θα βάλεις το Encoding που περιμένει ο εκτυπωτής για τα Ελληνικά. Ο εκτυπωτής όμως θα πρέπει να έχει ήδη ρυθμιστεί για να δέχεται το συγκεκριμένο codepage, είτε μέσω dip switch είτε στέλνοντας τα κατάλληλα escape sequences.

    H μέθοδος εκτύπωσης που χρησιμοποιείς παρακάμπτει εντελώς τους printer drivers και είναι κατάλληλη μόνο για εκτύπωση κειμένου. Συνεπώς, δεν παίζει κανένα ρόλο το GDI.

  •  09-05-2007, 17:13 31645 σε απάντηση της 31643

    Απ: Printing directly to a network printer

    Μάλλον δεν κατάλαβες τί εννοούσα. Το ελληνικό codepage παίζει ρόλο όταν στέλνεις χαρακτήρες στον εκτυπωτή, όχι γραφικά. Ο κώδικας που χρησιμοποιείς στέλνει χαρακτήρες, αλλά σε λάθος codepage. Ο κώδικας σου θα δουλέψει χωρίς πρόβλημα αν 1) ρυθμίσεις τον εκτυπωτή να χρησιμοποιεί το ελληνικό codepage, 2) Αντί για UTF8 χρησιμοποιήσεις το αντίστοιχο ελληνικό στον κώδικα. Μπορείς να χρησιμοποιήσεις το ibm737 για παράδειγμα, γράφοντας d= System.Text.Encoding.GetEncoding("ibm737").GetEncoder();

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  10-05-2007, 01:05 31659 σε απάντηση της 31645

    Απ: Printing directly to a network printer

    Θα δοκιμάσω την αλλαγή του codepage που πολύ σωστά επισήμανες και ελπίζω να λύσω το πρόβλημα μου αλλά μάλλον δεν διατύπωσα σωστά τις ερωτήσεις μου στο προηγούμενο μήνυμα.

     

    Και διευκρινίζω:

     

    Αντί να στέλνω χαρακτήρες στον network printer, με τον τρόπο που το κάνω μέχρι τώρα, μπορώ λες να κάνω render κείμενο, σχήματα ή φωτογραφίες και να τα στέλνω στον receipt printer μου μέσω TCP/IP ? Είναι αυτό εφικτό προγραμματίζοντας με compact framework και Windows CE ?

     

    Αν έχω καταλάβει σωστά, μπορώ να χρησιμοποιήσω τα graphical output functions μέσα στο coredll.dll των Windows CE. Αν πράγματι γίνεται έτσι, έχεις μήπως κάποιες συμβουλές ή παραδείγματα που θα μπορούσαν να μου φανούν χρήσιμα ?

     

     

    Σε κάθε περίπτωση σε ευχαριστώ πολύ

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems