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

 

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

ΕΚΤΥΠΩΣΗ ΑΠΟ C# ΣΕ ΕΚΤΥΠΩΤΗ DOT MATRIX

Îåêßíçóå áðü ôï ìÝëïò vtops. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 13-12-2012, 16:04. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  15-12-2010, 13:11 61672

    ΕΚΤΥΠΩΣΗ ΑΠΟ C# ΣΕ ΕΚΤΥΠΩΤΗ DOT MATRIX

    Καλημέρα σε όλους,

    Δεν έχω ιδιαίτερη εμπειρία με εκτπωτές dot matrix και θα ήθελα παρακαλώ τα φώτα σας.

    έχω να υλοποιήσω ένα project σε C# όπου έχω κάποιες ετικέτες σε τρέχω μέτρο χαρτί, όπου η κάθε ετικέτα έχει συγκεκριμένο πλάτος και ύψος και πρέπει ένας εκτυπωτής dot matrix να πηγαίνει να εκτυπώνει ένα πλήθος ετικετών που εξαρτάται από κάποιες παραμέτρους του προγράμματος και να σταματάει η κεφαλή  ακριβώς στην επόμενη ετικέτα προς εκτύπωση.

    Αρχικά ανέπτυξα μια ρουτίνα όπου παράγει ένα word document , όπου μέσα του να παράγεται ένας πίνακας μια στήλης και τόσων γραμμών όσων ορίζονται και μέσα στα κελιά του πίνακα να πέφτουν τα δεδομένα. (ΤΟ ύψος της κάθε γραμμής είναι ίσο με το ύψος της κάθε ετικέτας)

    Προσπαθώντας να εκτυπώσω το αποτέλεσμα μέσα από το word αντιμετωπίζω τα εξής προβλήματα:

    1) Οι ετικέτες δεν εκτπυπώνονται ομοιόμορφα, δηλαδή παρόλου που μέσα στο αρχείο του word τα βλέπω σωστά μετά στην εκτύπωση χάνουν πάνω στην ετικέτα (δηλαδή η πρώτη ετικέτα ξεκινάει πάνω πάνω, μετά η δεύτερη πάει 0,5 χιλιοστό παρά κάτω, η τρίτη 1 χιλιοστό κλπ κλπ και ξαφνικά στην 10η έχει χαθεί ένας πόντος)

    2) Και το ποιο σημαντικό είναι πως ακόμη και με αυτό το χάσιμο, μετά την εκτύπωση της τελευταίας ετικέτας ο εκτυπωτής τραβάει κενό χαρτί (παρόλου που κατά την δημιουργία του document έχω ορίσει το ύψος του χαρτιού να είναι ίσο το άθροισμα όλων των ετικετών που πάνε προς εκτύπωση)

    Μάλλον αυτό που επιχείρησα δεν είναι η σωστή προσσέγγιση του προβλήματος

    Έχει κανείς καμιά ιδέα για το πως μπορούμε να εκτυπώσουμε από C# σε dot matrix και να σταματάμε το χαρτί εκεί που θέλουμε;


    Best Regards
  •  15-12-2010, 13:19 61673 σε απάντηση της 61672

    Απ: ΕΚΤΥΠΩΣΗ ΑΠΟ C# ΣΕ ΕΚΤΥΠΩΤΗ DOT MATRIX

    Μιλάς για σειριακό ή παράλληλο εκτυπωτή; Πως το τυπώνεις το αρχείο που έφτιαξες;

    Το ότι πάει βαθμιαία πιο κάτω, πάει να πει ότι έχεις μία γραμμή (ή 0,5 χιλιοστά) παραπάνω ύψος στην εκτύπωσή σου.

    Ποιος εκτυπωτής είναι;

    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  15-12-2010, 13:45 61674 σε απάντηση της 61673

    Απ: ΕΚΤΥΠΩΣΗ ΑΠΟ C# ΣΕ ΕΚΤΥΠΩΤΗ DOT MATRIX

    Ευχαριστώ για την απάντηση

    Ο εκτυπωτής είναι ο epson lx 300+

    και είναι συνδεμένος με την παράλληλη θύρα (αν αυτό εννοείς)


    Best Regards
  •  15-12-2010, 13:58 61675 σε απάντηση της 61673

    Απ: ΕΚΤΥΠΩΣΗ ΑΠΟ C# ΣΕ ΕΚΤΥΠΩΤΗ DOT MATRIX

    Δυστυχώς η κατάσταση είναι λίγο ου μπλέξεις και "ιδιαίτερη" για μας τους ποιο νέους developers που η ευκολία της δημιουργίας
    με τα τόσα report tools που υπάρχουν πια δεν μπαίνεις σε αυτή την λογική του RAW Print.

    Πιστεύω ότι για να έχεις το καλύτερο αποτέλεσμα πρέπει να πάς με εκτύπωση κατευθείαν στην παράλληλη με StreamWriter και εκεί
    με escape sequence όπως υποστηρίζεται από τους εκτυπωτές αυτούς.....είναι επίπονη διαδικασία....εγω ευτυχώς δεν ήθελα
    να σταματάει όπως λές η κεφαλή σε συγκεκριμενο σημείο ούτε συνεχόμενο χαρτί και πήγα τελικά με reporting απλά.

    Ίσως αυτό να σε βοηθήσει για αρχή.

    Καλό θα είναι να μας κρατάς ενήμερους μέσω αυτής της δημοσίευσης για την λύση που έδωσες...θα είναι ενδιαφέρον για μένα τουλάχιστον.




  •  15-12-2010, 14:04 61676 σε απάντηση της 61674

    Απ: ΕΚΤΥΠΩΣΗ ΑΠΟ C# ΣΕ ΕΚΤΥΠΩΤΗ DOT MATRIX

    Η εκτύπωση μέσα από τα windows είναι αρκετά απλή - μπορείς να είτε να εκτυπώσεις σε σελίδα (γραφικά - σε όλους τους εκτυπωτές), είτε σε γραμμή (κείμενο - μόνο σε dot-matrix εκτυπωτές).

    Αν αυτό που πας να εκτυπώσεις είναι word αρχείο, τότε εκτυπώνεις γραφικά και δεν έχει σημασία που το εκτυπώνεις. Όλοι οι εκτυπωτές θα βγάλουν λίγο ως πολύ αποτέλεσμα.

    Αν όμως προσπαθείς να εκτυπώσεις αρχείο με γραμμές κειμένου, και προσπαθείς ταυτόχρονα να το ρίξεις επάνω σε ετικέτες - που είναι σύνηθες σενάριο - το να πετύχεις ακριβώς τις ετικέτες είναι θέμα try & error - θα πρέπει να κάνεις δοκιμές ώστε να τα πετύχεις ακριβώς τις ετικέτες, με όπλο τις άδειες γραμμές και τα κενά (spaces) που θα βάζεις. Μόλις το καταφέρεις αυτοματοποιείς το format που ανακάλυψες...

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  15-12-2010, 14:11 61677 σε απάντηση της 61674

    Απ: ΕΚΤΥΠΩΣΗ ΑΠΟ C# ΣΕ ΕΚΤΥΠΩΤΗ DOT MATRIX

    Και φαντάζομαι τυπώνεις μέσω driver των windows, σωστά;

    Καταρχάς έχω την εντύπωση ότι ο συγκεκριμένος εκτυπωτής έρχεται πακέτο με σειριακό interface και προαιρετικά βάζεις το παράλληλο.

    Εάν οι εκτυπώσεις σου είναι αποκλειστικά text τότε θα ήταν καλύτερα να συνδέσεις το σειριακό interface και να ψαχτείς με το το System.IO.Ports . Είναι πιο ζόρικο, αλλά θα σου επιτρέψει να έχεις απόλυτο έλεγχο πάνω στον εκτυπωτή, ο συγκεκριμένος μάλιστα υποστηρίζει και κάποια esc codes τα οποία έχουν κάποιες συγκεκριμένες λειτουργίες (underline, bold, κόκκινο χρώμα κλπ).

    Βέβαια πρέπει να κάνεις κάποια πράγματα χειροκίνητα (πχ μέτρημα γραμμών - εξομοίωση προγραμματιστικά του form feed)

    Είναι ζόρικος ο δρόμος αυτός, αλλά δεν νομίζω να έχεις άλλη επιλογή (εκτός και αν πιάσει η πατέντα με το word, πράγμα δύσκολο!)

    Εάν ασχοληθείς με το σειριακό, τότε προσοχή: Χρειάζεται κάποιο delay ανάμεσα στις εντολές! Εάν βάλεις να τυπώνει σε μία επανάληψη, μπορεί να μην δουλέψει. Εάν η θύρα είναι ασύρματη (bluetooth), ακόμα χειρότερα.

    Το βασικό τιπ είναι αυτό: Εάν φτιάξεις την εκτύπωση σού να βγαίνει σε ένα απλό text αρχείο, τότε θα είναι σχετικό εύκολο να την κάνεις να βγαίνει σε έναν εκτυπωτή γραμμής.

    Αν χρειαστείς κάτι πιο συγκεκριμένο, τότε ας τα πούμε και με κώδικα.


    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  29-01-2011, 00:13 62769 σε απάντηση της 61672

    Απ: ΕΚΤΥΠΩΣΗ ΑΠΟ C# ΣΕ ΕΚΤΥΠΩΤΗ DOT MATRIX

    Από προσωπική εμπειρία o καλύτερος τρόπος εκτύπωσης σε Dot Matrix είναι μέσω generic text only driver. Κατ' αρχήν θα πρέπει να δηλώσεις τον εκτυπωτή ως generic text only και μετά να "πάς" στα tab printer commands και Font Selection και να δηλώσεις εκεί τα escape sequences που θέλεις να χρησιμοποιήσεις.

    Ευτυχώς οι πιό πολλοί Dot Matrix εκτυπωτές υποστηρίζουν 2 emulation modes, IBM και EPSON ( http://en.wikipedia.org/wiki/ESC/P )οπότε είναι ευκολότερο να ρυθμίσεις κάθε εκτυπωτή στο συγκεκριμένο mode παρά να γράφεις κάθε φορά διαφορετικά escape sequences.

    Μετά θα πρέπει να ελέγξεις αν ο εκτυπωτής έχει εγκαταστημένη την Ελληνική γραμματοσειρά με μιά απλή εκτύπωση από το notepad αφού πρώτα επιλέξεις το αντίστοιχο Character set μέσω των ρυθμίσεων του εκτυπωτή.

    Όσον αφορά τον σχεδιασμό της εκτύπωσης εγώ χρησιμοποιώ Crystal Reports .NET. Τα Crystal reports δεν υποστηρίζουν επίσημα DM εκτυπωτές αλλά εγώ προσωπικά δεν αντιμετώπισα κανένα πρόβλημα. Μπορείς να τα χρησιμοπoιήσεις άφοβα και γιά Barcode printing (Zebra, Datamax etc) χρησιμοποιώντας τον αντίστοιχο driver. Επίσης τα Crystal επιτρέπουν την διαχείριση Datasets και δεν προυποθέτουν την ύπαρξη Datarelation objects μεταξύ των DataTables γιά τα εκάστοτε Joins.

    Αν δεν χρησιμοποιήσεις τα Crystal γιά Interface design και προτιμήσεις τον "παραδοσιακό" τρόπο εκτύπωσης θα πρέπει να αναπτύξεις δική σου εφαρμογή ικανή (τουλάχιστον) στο να ομαδοποιεί και να κάνει aggregates (SUM, MIN, MAX κλπ) στα δεδομένα πρός εκτύπωση, κάτι το οποίο προυποθέτει αρκετούς μήνες γιά R&D, χρόνος που δυστυχώς θεωρείται απαγορευτικός γιά τα Ελληνικά δεδομένα.

     

     

     

     

     

     

     

     

     

     

     

     

     

  •  13-12-2012, 14:50 71747 σε απάντηση της 62769

    Απ: ΕΚΤΥΠΩΣΗ ΑΠΟ C# ΣΕ ΕΚΤΥΠΩΤΗ DOT MATRIX

    Καλησπέρα σε όλη την παρέα,
    Καταρχάς σας ευχαριστώ όλους για τις συμβουλές

    Το project είχε παγώσει για λίγο καιρό (και νόμιζα πως την γλύτωσα) αλλά  πριν λίγες ημέρες ξαναενεργοποιήθηκε.
    Έχω ήδη βρει μια φόρμουλα για το πως θα χτυπήσω τις ετικέτες στο σημείο που θέλω, και το μόνο μου πρόβλημα είναι το πως θα σταματήσω το χαρτί.

    Δηλαδή αν έχω να τυπώσω 5 ετικέτες που η κάθε ετικέτα είναι 1,2cm ύψος την χτυπάω ακριβώς στα 0,6cm την κάθε μια αλλά μετά ο εκτυπωτής τραβάει καμιά 15αριά ετικέτες χωρίς να κινείται η κεφαλή.
    Πως λοιπόν μπορώ να σταματήσω το ρολάρισμα του χαρτιού;

    Παραθέτω και κώδικα:

      private void button1_Click(object sender, EventArgs e)
            {
                string printPath = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                fileToPrint = new System.IO.StreamReader(printPath + @"\myFile.txt", Encoding.GetEncoding(1253));
                printFont = new System.Drawing.Font("Courier New", 10);
                printDocument1.Print();
                fileToPrint.Close();
               
            }


            private void printDocument1_PrintPage_1(object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {
                float yPos = 12;
                int count = 0;
                float leftMargin = e.MarginBounds.Left;
                float topMargin = e.MarginBounds.Top;
                string line = null;
                float linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics);
                while (count < linesPerPage)
                {
                    line = fileToPrint.ReadLine();
                    if (line == null)
                    {
                        break;
                    }
                  
                    yPos = yPos + 50;
                    e.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, new StringFormat());
                    count++;

                }



                if (line != null)
                {
                    e.HasMorePages = true;
                }

            }


    Έχει κανείς καμιά ιδέα;
    Ευχαριστώ!


    Best Regards
  •  13-12-2012, 16:04 71748 σε απάντηση της 71747

    Απ: ΕΚΤΥΠΩΣΗ ΑΠΟ C# ΣΕ ΕΚΤΥΠΩΤΗ DOT MATRIX

    Τί μέγεθος έχεις ορίσει για τη σελίδα σου? Μετά από κάθε εκτύπωση, ο εκτυπωτής θα προχωρήσει όσο χρειάζεται μέχρι να φτάσει στην επόμενη σελίδα.

    Υποψιάζομαι ότι έχεις αφήσει το αρχικό μέγεθος σελίδας, δηλαδή A4 ή Letter. Επιπλέον, το linesPerPage είναι οι γραμμές μίας ετικέτας ή οι γραμμές που χωράνε σε μία σελίδα από ετικέτες? Για τον εκτυπωτή, σελίδα είναι η ετικέτα.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems