7
votes

Envoyer des commandes ESC à une imprimante en C #

Mon application doit imprimer des factures, puis une facture à partir de la base de données, insérez des informations sur la facture dans une grande chaîne (en racontant la ligne, la colonne, etc.) après cela, la chaîne est prête à être envoyée à une imprimante .

Mon problème est que: j'ai besoin de mettre des commandes / personnages ESC / P dans ma grande chaîne

J'ai essayé de faire quelque chose comme ceci: xxx

avec ceci, la ligne 10 fera un formulaire, mais cela ne fonctionne pas

Remarque: j'envoie la mybigstring tout à la fois à l'imprimante.

faire fonctionne de code, je dois envoyer la ligne de données par ligne à une imprimante?

Merci pour l'aide.

PS: Désolé, pour mon anglais, je suis un développeur brésilien qui Ne parlez pas anglais (encore).


1 commentaires

L'imprimante est une Epson FX-1170 (imprimante DOT-Matrix)


3 Réponses :


6
votes

J'ai blogué à ce sujet avant de devoir le faire moi-même. Ne pas toot ma propre corne trop fort, mais je vous recommande de lire cette entrée, comme je parle A propos d'une commande d'image complexe avec l'imprimante. Si vous pouvez comprendre cela, vous pouvez imprimer quoi que ce soit!

(Je parle de ESC / POS, utilisé dans les imprimantes de réception de détail, mais la sémantique de la discussion s'applique à ESC / P, la langue plus ancienne de la matrice DOT-Matrix. )

en bref, utilisez un binarywriter au lieu d'une chaîne ou vous serez désespérément confus (comme je l'ai fait) car certains caractères sont "cuits au goût "Dans le mauvais encodage sur le chemin de l'imprimante. (Croyez-moi sur celui-ci! N'utilisez pas de StringBuilder Lorsque vous essayez de parler dans ESC / POS.)

Soyez prudent de ne pas utiliser le écrire (String) < / Code> Surcharge du Barronnage Comme il prépendrait la longueur de la chaîne sous forme d'octet dans le flux, ce qui n'est pas ce que vous voulez. ( J'ai également blogué à propos de celui-ci après avoir appris que le fait difficile, sur le même projet.)

alors j'utilise du code pour envoyer le Byte Array, comme obtenu à partir du Barronnawiter , directement à l'imprimante par p / invoquant: xxx

bonne chance!


2 commentaires

Merci Nicholas, votre code semble être très avancé pour moi, mais je vais essayer de le comprendre. :RÉ


@Nicholas Votre blog ne fonctionne plus. Y a-t-il de toute façon je pourrais jeter un coup d'oeil à ce code?



5
votes

contourner le pilote d'imprimante et contrôler directement l'imprimante, en utilisant sa langue de commande native, est un scénario pris en charge. Le P / Invoke est bien expliqué dans ce KB Article .

Bien sûr que vous voulez faire cela? Il est rare, de la mettre à la fois légèrement, généralement tenté d'imprimantes thermiques ou matricielles à faible coût. Si vous n'aimez pas les mécanismes de PrintDocument.Printe, personne ne le fait, vous pouvez envisager mon code dans Ce fil . Notez la méthode de formefeed.


2 commentaires

Lire et mettre en œuvre l'article KB et cela fonctionne bien pour moi. Merci


L'article de KB ouvre l'imprimante dans le mode " brut ", ce qui signifie que vous devez émettre des octets que le pilote d'imprimante acceptera. Essayer d'envoyer 0xFF à une imprimante XPS le fera de ne rien faire. Vous devez changer le mode en " texte " ( SOCIAL.MSDN.MICROSOFT.COFORMS/EN-US/WINDOWSXPS/THReAD/... )



0
votes

".... openPrinter (imprimeur.normaliser (), out imprimeurhandle, intptr.zero) ..."

Peut-être nécessaire pour définir IntPTR.Zero à cru aussi.

Imprimantes, notamment la matrice DOT, il peut être directement utilisé à l'aide de DOS, de la méthode CMD, qui permet également d'utiliser des codes de commande ESC / 0x1b de base pour contrôler l'imprimante ,. . c.

comme windowos / graphique, il peut être graphique et brut en définissant OpenPrinter (, imprimeur_default) imprimante_default et DOC-INF, Pls Report Win32 SDK Références.

Pour toute impression brute, elle peut utiliser la commande ESC (voir Détails manuels de l'imprimante) pour imprimer n'importe quel graphique comme quels Windows pilote a fait.

En tant qu'image RAW, il suffit d'ajouter l'un des 20 premiers ASCII, tels que Oxoc (Formfeed) 0x0Doa (0x0a, 0x0D, \ N ou Newline) Chaque imprimante a de légères commandes de l'ESC, mais à l'aide de la commande Master ESC est condamnée à une amende pour la majeure partie de la matrice de points similaire.

Comme exemple de mode brut suit, Formfeed, \ n & \ r

Char ComeFeed = 0x0c; // ou \ f

char cstr [] = "1 = texte, ...... @ \ n2 = texte ..... \ r \ f3 = texte ......."; // Utiliser \ f n'utilisez pas de formes en CFFFEE, vous pouvez le calculer

CSTR> LPT1; // sortie à l'imprimante DOS ou la méthode CMD, de cause doit obtenir le LPT1 disponible.

impression sera

première page

1 = texte, ...... @

2 = texte .....

à la 2ème page est

3 = texte .......

J'espère que cela peut être de l'aide, bonne chance.


0 commentaires