Το θέμα το έχουμε ξανασυζητήσει αρκετές φορές. Κάνε μία αναζήτηση με τη λέξη "φορολογικός" και θα βρεις αρκετές συζητήσεις. Καταρχήν πρέπει να καταλάβεις ότι άλλο ο φορολογικός μηχανισμός, άλλο ο θερμικός εκτυπωτής για τις αποδείξεις. Ο φορολογικός μηχανισμός δεν ενδιαφέρεται για το τί τυπώνεις, αλλά για τα περιεχόμενα της απόδειξης (είδη, τιμή, ημερομηνία κλπ). Ουσιαστικά, παίρνει το text που του δίνεις, δημιουργεί μία μορφή ψηφιακής υπογραφής και στην επιστρέφει, ενώ καταγράφει και το περιεχόμενο που του έστειλες. Εσύ μετά πρέπει να χρησιμοποιήσεις την υπογραφή για να τυπώσεις την απόδειξη. Μπορείς να προσθέσεις εικόνες, σχηματάκια, χαιρετισμούς, συνταγές, αστρολογικές προβλέψεις, δεν έχει σημασία. Σημασία έχει να τυπώσεις οπωσδήποτε αυτά που έστειλες στον φορολογικό μηχανισμό και την υπογραφή. Αν έχεις δει π.χ. τις αποδείξεις του Γρηγόρη, έχουν και ένα λογότυπο. Αυτό δεν το στέλνουν στο φορολογικό μηχανισμό.
Ανάλογα με τον κατασκευαστή του φορολογικού μηχανισμού, σου δίνουν κάποια προγράμματα για την επικοινωνία με αυτόν. Μπορείς π.χ. να αποθηκεύσεις σε ένα folder το περιεχόμενο της απόδειξης και η εφαρμογή του κατασκευαστή θα το διαβάσει, θα το στείλει στον φορολογικό μηχανισμό και θα σου επιστρέψει σε νέο folder την υπογραφή. Εσύ παίρνεις την υπογραφή, την προσθέτεις στο αρχικό κείμενο και μετά τυπώνεις χαιρετισμούς, λογότυπα κλπ.
Από εκεί και πέρα, για την εκτύπωση στον θερμικό εκτυπωτή αποδείξεων είναι πολύ ευκολότερο να δουλέψεις με τη σειριακή παρά με το PrintDocument. Το PrintDocument έχει φτιαχτεί για εκτύπωση ολόκληρων σελίδων, όχι για ακριβή έλεγχο ποιός χαρακτήρας θα σταλεί που και πότε. Οι θερμικοί εκτυπωτές δέχονται και εντολές για το πόσο να προωθήσουν το χαρτί, πότε να το κόψουν, ακόμα και αν θα το κόψουν εντελώς ή θα κρατήσουν και μία ακρίτσα. Επιπλέον, οι εκτυπωτές αποδείξεων σου στέλνουν πληροφορίες για το μελάνι, το χαρτί, τη θερμοκρασία, μπορούν να αποθηκεύσουν το λογότυπο, γενικά πολλά πράγματα που δεν γίνονται με το PrintDocument καθώς δεν έχουν νόημα για τους περισσότερους εκτυπωτές.
Τελευταίο σημείο που πρέπει να προσέξεις πολύ, είναι ότι το ASCII που στέλνεις, δεν είναι ASCII αλλά χρησιμοποιεί μία συγκεκριμένη κωδικοποίηση. Προτού στείλεις τα strings θα πρέπει να τα μετατρέψεις στο αντίστοιχο encoding μέσω της κλάσης Encoding.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos