Drucken mit Brother QL-500

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Drucken mit Brother QL-500

    Hallo,

    Ich habe folgenden Problem:
    Ich habe eine Brother QL-500 und möchte gerne eine Barcode (Klein) ausdrucken. Habe mir extra 29mmx30.48m Band besorgt. Alles schön und gut er durckt alles das ist kein Problem, doch er ist sehr verschwenderisch. Ich würde Maximal 29mmx25mm (eigendlich noch weniger) benötigen doch der Drucker druckt den kleinen Barcode und fährt vor als hätte er 29mmx90mm Band eingesetzt. Was kann man dagegen tuen vergesse ich was. Habe schon viele Methoden versucht aktuell benutzte ich diese.

    VB.NET-Quellcode

    1. Private Sub PrintDocument1_QueryPageSettings(sender As Object, e As QueryPageSettingsEventArgs) Handles PrintDocument1.QueryPageSettings, pdoc.QueryPageSettings
    2. Dim ps As New Printing.PaperSize("Etikett", 110, 45)
    3. e.PageSettings.PaperSize = ps
    4. e.PageSettings.PaperSize.RawKind = Printing.PaperKind.Custom
    5. End Sub


    VB.NET-Quellcode

    1. ​Public Sub EtikettDrucken(ByVal Text As String)
    2. TMPBarcode = Text
    3. Dim Form3PrintDocument1 As New PrintDocument()
    4. 'Form3.PrintDocument1.PrinterSettings.DefaultPageSettings.PaperSize = New PaperSize("Etikett", 43, 110)
    5. Form3.PrintDocument1.PrinterSettings.DefaultPageSettings.PaperSize = New PaperSize("Etikett", 110, 45)
    6. Form3.PrintPreviewControl1.Update()
    7. Form3.PrintPreviewControl1.Refresh()
    8. Form3.PrintPreviewDialog1.Document = Form3.PrintDocument1
    9. If Form3.PrintPreviewDialog1.ShowDialog() = DialogResult.Cancel Then
    10. Else
    11. Dim findprinter As Boolean = False
    12. Dim printername As String = ""
    13. Dim pkInstalledPrinters As String
    14. ' Find all printers installed
    15. For Each pkInstalledPrinters In PrinterSettings.InstalledPrinters
    16. If pkInstalledPrinters.Contains(DruckerName) Then
    17. findprinter = True
    18. printername = pkInstalledPrinters
    19. End If
    20. Next pkInstalledPrinters
    21. If findprinter = True Then
    22. Form3.PrintDocument1.PrinterSettings.PrinterName = printername
    23. Form3.PrintDocument1.Print()
    24. End If
    25. End If
    26. End Sub


    Dazu zu sagen Das Document befindet sich auf Form3 und die Public Sub EtikettDrucken befindet sich in eine Module was von mehreren Formen aufgerufen wird.

    Kann mir da wer weiterhelfen?[font='Consolas, "Courier New", monospace; font-size: 13px; white-space: pre-wrap; background-color: rgb(252, 253, 254)']​Public [/font]Sub[font='Consolas, "Courier New", monospace; font-size: 13px; white-space: pre-wrap; background-color: rgb(252, 253, 254)'] EtikettDrucken[/font]
    Mir sind gerade die QL-500-Drucker ausgegangen, mal sehen, vielleicht habe ich morgen einen zur Verfügung, aber fangen wir mal gaaanz vorne an. Und zwar bei Deinem Problem. Danach die Codeanalyse.
    Wenn Du 29 mm x 25 mm Etiketten hast, warum stellst Du die nicht ein? New PaperSize("Etikett", 110, 45) ist zu klein, nämlich 27,94 mm x 11,43 mm. Trag da erstmal die richtigen Werte ein und dann sehen wir, ob es dann besser klappt.
    Nächster Tipp: Sende den Druck an nen PDF-Drucker (bei Win10 wird m.E. standardmäßig der "Microsoft Print to PDF"-"Drucker" installiert. Bevor Du die guten Etiketten verschwendest.

    Falls Du keine Kommentare zu Deinem Code an sich lesen willst, höre an dieser Stelle auf.
    Ansonsten:
    Du arbeitest in einem Modul mit Objekten, die auf einem Form liegen? Das ist ein Widerspruch in sich - wenn es Visual Basic nicht ermöglichen würde. Das ist ein no go. Der ganze Aufbau ist ziemlich ... tja. Falsch. Aber wenn Du es so laufen lassen willst ... Dein Programm.
    Zeile#10: Am Ende der Zeile ein Exit Sub und Du kannst Dir die Else-Verschachtelung sparen.
    Zeile#19: Warum "Contains"? Wenn Du Druckername irgendwoher beziehst, ist das dann ein Teilstring eines Druckernamens?
    Die Zeilen#18-#27 lassen sich prima zusammenfassen (die wilden Codekonstrukte aus Modul und "Form3" lass ich mal unverändert, auch wenn es mir davor graust):

    VB.NET-Quellcode

    1. For Each pkInstalledPrinters In PrinterSettings.InstalledPrinters
    2. If Not pkInstalledPrinters.Contains(DruckerName) Then Continue For
    3. Form3.PrintDocument1.PrinterSettings.PrinterName = printername
    4. Form3.PrintDocument1.Print()
    5. Exit For
    6. Next

    einen Schritt weiter, ohne For-Schleife

    VB.NET-Quellcode

    1. If Not PrinterSettings.InstalledPrinters.Cast(Of String).Any(Function(x) x = Druckername) Then Exit Sub
    2. Form3.PrintDocument1.PrinterSettings.PrinterName = Druckername
    3. Form3.PrintDocument1.Print()
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @NicoZ Vielleicht solltest Du zunächst mal ein paar grundlegende Dinge überdenken, verstehen und umsetzen:
    Drucken mehrseitiger Dokumente
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    • Wozu brauchst Du zwei PrintDocument-Instanzen?
    • Wozu brauchst Du ein PrintPreviewControl und ein PrintPreviewDialog?
    • Wenn Du .ShowDialog() = DialogResult.Cancel abfragst, genügt ein Return
      (hat @VaporiZed schon geschrieben).

    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!