Drucken per GDI+ auf Bondrucker

  • C#

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von dive26.

    Drucken per GDI+ auf Bondrucker

    Hallo Forum,
    ich habe ein Problem beim Drucken auf einen TM-M30 Bondrucker von Epson. Der Drucker hat Endlos Papier.
    Leider schneidet der Drucker das Papier immer nach ca. A4 Height ab. Der Druck ist dann beendet.
    Sende ich den Druckbefehl auf einen .pdf Drucker, funktioniert es.
    Anbei mein Code zum ändern des Papiers:

    C#-Quellcode

    1. PaperSize papersize = new PaperSize();
    2. papersize.Width = 1000;//Angabe ist in hunderdstel Zoll
    3. papersize.Height = 1000000000;
    4. printDoc.DefaultPageSettings.PaperSize = papersize;


    Der Epson Drucker scheint das zu ignorieren.
    Sende ich ihm per Word eine entsprechende, mehrseitige Datei, kann ich kilometerlang drucken, ohne das er den Druck unterbricht.

    Ich habe mir mal in einer ComboBox die vom Drucker gelisteten Papiersorten wiedergeben lassen:

    C#-Quellcode

    1. for (int i = 0; i < printDoc.PrinterSettings.PaperSizes.Count; i++)
    2. {
    3. comboBox1.Items.Add(printDoc.PrinterSettings.PaperSizes[i].Kind);
    4. }

    Der Epson zeigt mir dann nur mehrere "Custom" Formate an. Die .net Enum PaperKind kennt auch spezielle Formate wie "GermanStandardFanfold".

    Ich habe leider keine Ideen mehr wie ich das lösen kann und wäre für jeden Tipp dankbar!
    Viele Grüße
    @Double-U Willkommen im Forum. :thumbup:
    Welche Papierformate werden Dir denn vom Drucker angeboten?

    C#-Quellcode

    1. papersize.Height = 1000000000;
    entspricht wie viel Metern?
    Wie steuerst Du im Druck selbst Deine einzelnen Seiten?
    Sieh auch mal hier rein: Drucken mehrseitiger Dokumente
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo, danke!
    Ich habe schon häufig Druckroutinen im Format A4,A5,A6 umgesetzt. Ein Standard A4 Drucker gibt mir neben diesen Formaten auch zusätzlich diese Custom Formate an. Der Bon Drucker zeigt mit dem Code oben keinerlei Formate in der combobox an, nur die Custom Formate.
    Die Höhe entspricht 254Metern. Das ist natürlich Quatsch, 1m ist normalerweise ausreichend. Ich habe das jetzt sicherheitshalber auch mal auf 60cm gesetzt. Macht im Ergebnis aber keinen Unterschied. Der Drucker ignoriert das einfach.

    Hasemorepages ist mir geläufig. Da ich aber Endlospapier habe, wollte ich mir das allerdings gerne sparen.

    Ich hatte schon die Vermutung das es an dem GDI Druck liegt. Bon Drucker steuert man ja häufig mit ESC/POS an. Aber wenn Ich zwei word Seiten am Stück Drucken kann glaube ich das nicht. Word nutzt doch bestimmt auch gdi zum Drucken, oder?

    Vielen Dank für die Tipps!

    Double-U schrieb:

    Die Höhe entspricht 254Metern.
    Ich hab bisher noch nicht mit nem Bon-Drucker gedruckt.
    Fang einfach mal an, kleine vollständige Seiten zu drucken, um zu untersuchen, ob und wenn ja wie das geht.
    Möglicherweise gibt es da immer noch die uralte LPrint-Philosophie in einem Dir / und nicht bekanntenm Treiber, wo Du einfach die nächste Zeile rausblasen kannst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Double-U
    Schau mal in den Settings der Druckereigenschaften.
    Ich habe hier einen Etiketten Drucker der nur auf die Einstellungen in der Systemsteuerung reagiert, auf Code Einstellungen reagiert der auch nicht.
    Ist bei dir uU ähnlich.
    Zunächst einmal vielen Dank für eure Ratschläge. Ich konnte das Problem jetzt lösen. Vielleicht hilft es ja mal jemandem:

    Ich habe einfach mal ein Testprojekt gemacht:

    C#-Quellcode

    1. ​private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    2. {
    3. e.Graphics.PageUnit = GraphicsUnit.Millimeter;
    4. printDocument1.PrinterSettings.PrinterName = printDialog1.PrinterSettings.PrinterName;
    5. Brush b = Brushes.Black;
    6. int x = 0;
    7. for(int y = 0;y<5000;y++)
    8. {
    9. e.Graphics.DrawString(y.ToString(), new Font("Arial", 7), Brushes.Black, x, y);
    10. if (x < 49)
    11. {
    12. x = x += 7;
    13. }
    14. else
    15. {
    16. x = 0;
    17. }
    18. }
    19. }


    Der Bondrucker und die .pdf Drucker drucken das bis 297mm.
    Übergebe ich dem .pdf Drucker das Seitenformat A2, druckt er 356mm. Der Bondrucker unterstützt aber leider kein Format wie A2.

    Mein ursprünglicher Gedanke war ja das Papier als "Custom" anzugeben (siehe Startpost).
    Kleinere Werte werden übernommen und entsprechend kleine Seiten gedruckt. Wie sich herausgestellt hat, kann ich das Papier aber nur bis A4 Höhe einstellen. Alle Werte darüber hinaus werden verworfen.
    Dann habe ich versucht ein Format wie z.B. A4 zu nehmen und die Height Eigenschaft zu verändern. Dann bekam ich eine Exception, mit dem Hinweis, dass nur Custom Formate verändert werden können.

    Letztlich habe ich mir noch einmal die vom Epson Drucker vorgegebenen Formate angeschaut. Ich hatte es ja ursprünglich mit "Rollpaper" versucht. Dieses hat aber auch nur eine Höhe von 297mm.
    Das war mir vorher nicht aufgefallen, der Sinn erschließt sich mir auch nicht.
    Ein anderes Custom Format hatte die Definition "Ansi F Kind" und kann ca. dreieinhalb mal so lang drucken.
    Das reicht mir völlig. Dennoch wundere ich mich über die Beschränkung auf A4 mit eigenen Formaten.

    Vielen Dank für eure Tipps!
    PS @Sgt.FloydPepper: Findest du ESC/Pos echt leichter? Klar kann man damit den Drucker exakter steuern und z.B. manuell schneiden, aber man muss ja auch ziemlich Hardware nah codieren...
    Dennoch ist die Seite sehr interessant, werde ich mir auf jeden Fall noch genauer ansehen. Danke.
    @Double-U Bei jedem Schleifendurchlauf erstellst Du eine Font-Instanz, das ist suboptimal, zumal Font IDisposable implementiert.
    Am besten, Du machst um die y-for-Schleife ein Font-using, damit ist sichergestellt, dass die Instanz ordentlich aufgeräumt wird.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Double-U

    1. Per GDI auf einen Bondrucker zu drucken ist machbar, aber ob das das gelbe vom Ei ist, darüber lässt sich streiten. Es gibt viele Report-Componenten die Dir beim Drucken sehr viel Arbeit abnehmen. Ich verwenden seit Jahren die Komponente "VPE - Virtual Print Enginge".

    2. Einfach im Bondruckertreiber die Papierlänge von 297 mm auf 3276 stellen, schon kannst Du bis zu 3 Meter Bons drucken. Druckertreiber in der Systemsteuerung > Einstellungen > Erweitert > Papiergröße auf "Roll Papier 80x3276mm" stellen.

    3. Die Epson-Druckertreiber bis zur V5 haben Eigenheiten die das Arbeiten damit zur Qual macht. Die vielen Handelskassen der Supermarktketten arbeiten alle immer noch mit ESC-Befehlen, da ist es egal. Aber Grafigdruck und Formatierung - da haben die EPSON Treiber sehr viele Probleme. Erst mit der V6 Treibergeneration und z.B. dem TM-T20III funktioniert auch das einwandfrei.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at