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 p>
J'ai essayé de faire quelque chose comme ceci: p> avec ceci, la ligne 10 fera un formulaire, mais cela ne fonctionne pas p> Remarque: j'envoie la mybigstring tout à la fois à l'imprimante. P> faire fonctionne de code, je dois envoyer la ligne de données par ligne à une imprimante? p> Merci pour l'aide. P> PS: Désolé, pour mon anglais, je suis un développeur brésilien qui Ne parlez pas anglais (encore). p> p>
3 Réponses :
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. ) p>
en bref, utilisez un Soyez prudent de ne pas utiliser le alors j'utilise du code pour envoyer le bonne chance! p> p> binarywriter code> au lieu d'une chaîne code> 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 Code> Lorsque vous essayez de parler dans ESC / POS.) P>
écrire (String) < / Code> Surcharge du
Barronnage Code> 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. (
Byte Code> Array, comme obtenu à partir du
Barronnawiter code>, directement à l'imprimante par p / invoquant: p>
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?
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 . P>
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. P>
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 code>", 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 code>" ( SOCIAL.MSDN.MICROSOFT.COFORMS/EN-US/WINDOWSXPS/THReAD/... )
".... openPrinter (imprimeur.normaliser (), out imprimeurhandle, intptr.zero) ..." p>
Peut-être nécessaire pour définir IntPTR.Zero à cru aussi. P>
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. p>
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. P>
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. p>
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. P>
Comme exemple de mode brut suit, Formfeed, \ n & \ r p>
Char ComeFeed = 0x0c; // ou \ f p>
char cstr [] = "1 = texte, ...... @ \ n2 = texte ..... \ r \ f3 = texte ......."; // Utiliser \ f n'utilisez pas de formes en CFFFEE, vous pouvez le calculer p>
CSTR> LPT1; // sortie à l'imprimante DOS ou la méthode CMD, de cause doit obtenir le LPT1 disponible. P>
impression sera p>
première page p>
1 = texte, ...... @ p>
2 = texte ..... p>
à la 2ème page est p>
3 = texte ....... p>
J'espère que cela peut être de l'aide, bonne chance. p>
L'imprimante est une Epson FX-1170 (imprimante DOT-Matrix)