formular drucken

  • Hallo ich habe eine frage,
    ich möchte ein Formular erstellen und das soll sich dann als label ausdrucken lassen in der Größe 29mm x 90mm.
    Geht das oder wie stelle ich das an.

    MfG
    Roberto

    Einmal editiert, zuletzt von heyhey83 (3. Januar 2017 um 16:12) aus folgendem Grund: Nachtrag

  • Moin.


    Hier kannst Du mal nachsehen, ob es paßt.
    Ist auf die Schnelle mal gescriptet und Dank der Hilfe war es auch
    schnell umsetzbar. Nur überarbeiten und anpassen, das ist Dein Part. ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Okay soweit ist das gut aber wie gesagt das label ist 29mm x 90mm, Wenn ich auf drucken klicke soll es das Menü öffnen wo ich den Label Drucker aussuchen kann da ich zwei Drucker habe an ein Rechner. und das speichern will ich über eine ini datei machen

    Code
    Case $Save
         save()
    
    
    Func save()
        IniWrite("Save.ini", "lafa", "Artikelnummer", GUICtrlRead($artikelnr))
        IniWrite("Save.ini", "lafa", "Artikel Bezeichnung", GUICtrlRead($bezeichnung))
    	IniWrite("Save.ini", "lafa", "Preis", GUICtrlRead($preis))
    			EndFunc

    Zweites es soll keine PDF werden.

  • So habe da was geändert


    was mich stört sind bei der ini das die abstände untereinander zu groß sind



    Zeile 1 Soll ganz verschwinden, Zeile fünf sollte auf drei und Zeile 8 auf 4.

    Beim Ausdruck soll wieder das Wort Preis stehen noch = bei den anderen das selbe.

    MfG
    Roberto

  • Auf die Gefahr hin, dass ich die Fragestellung missverstehe...

    Eine reine Textdatei (*.txt) ist imho denkbar ungeeignet dafür. Du kannst ja nicht auf physische Einheiten zurückgreifen, du kannst ja noch nicht einmal die Schriftgröße anpassen. Ich würde spontan mal den Ansatz testen, eine HTML-Datei zu generieren und diese zu drucken. Das hat den Vorteil, dass du mittels CSS auf physische Einheiten (Inch, cm, mm...) zurückgreifen kannst.

    Mal ein kleines Beispiel. Das sollte theoretisch nach dem Drucken genau 90x29 mm groß sein.

    Edit: Wenn du im Body-Tag noch ein onload="javascript:window.print();" hinzufügst, wird sogar sofort der Drucken-Dialog aufgerufen. Das Dokument muss dann nach dem Erzeugen nur noch mit bspw. dem IE geöffnet werden.

  • Danke aber HTML ist da ungeeignent es soll ein eigenstädiges programm sein bzw. .exe Werde das ganze noch erweitern mit mehreren reitern usw.

    Aber bei den drucken ist es so das ich das ganze nicht als PDF Ausgeben will wie mache ich das ???


    MfG
    Roberto

  • Sagt ja keiner, dass die anderen sehen müssen, dass du es mit dem InternetExplorer machst ;)

    Wenn du wirklich über die WinApi drucken willst... das ist ziemlich komplex. Und der Aufwand lohnt nicht wirklich, denn am Ende kommt was ähnliches bei rum, wie jetzt, nur dass du dich um alles selbst kümmern must.

    MfG Kanashius

  • Okay das ist schön und gut, gibt es da keine input feld wo ich dann immer die Nr ,Bezeichnung & Preis reinschreibe ? .

    Oder kann man wenn das schon als PDF ausgeben wird, das so machen das es die PDF in 29mm x 90mm speichert ?

    MfG
    Roberto

  • Die Inputfelder kannst du ja selber dazuskripten, ist ja kein Aufwand. Den "schwierigen" Teil hat Kanashius ja schon demonstriert.

    Was meinst du mit PDF? Es wird ein Standard-Drucken-Dialog geöffnet. Mit dem kannst du dann ganz normal drucken, egal ob auf einem physisch vorhandenen Drucker oder auf einem PDF-Drucker.

    @Kanashius alpines hat recht, die Lösung ist cool. :D

  • Code
    ShellExecute (@ScriptDir & "\" & "Saveankauf.ini", "", "", "print", @SW_HIDE)

    das ist die funtion beim drucken und da speichert der das als PDF und will es auch drucken aber halt auf den falschen Drucker.

  • Wenn ich das richtig in Erinnerung habe, sollte im sich öffnenden Drucken-Dialog der als Standard in der Systemsteuerung angegebene Drucker ausgewählt werden, aber noch vom Nutzer änderbar sein.
    Der Programmierer hat - soweit ich weiß - keinen Einfluss auf die Wahl des Druckers. Was auch durchaus Sinn macht.

    Kann auch sein, dass ich mich da jetzt ein wenig verzettele. Ich nutze seit längerem nur noch Linux-Systeme.

  • Gerade habe ich unter win10 versucht den Code von @Kanashius auszuprobieren. Klappt bei mir nicht.
    Der Code läuft ohne Fehlermeldung durch, aber es gibt keine sichtbaren Effekte..
    Raffe ich nicht, was passieren soll?

    Grüße autoiter

  • So, ich habe jetzt nochmal 'ne Windows-VM aufgesetzt. ^^

    Folgender Code funktioniert bei mir. Das Problem ist, dass man auf das Drucken-Fenster warten muss, bevor man den IE wieder schließt.


    [autoit]


    #include <IE.au3>

    [/autoit][autoit][/autoit][autoit]

    $sCurrentHTML = '<html><head><style type="text/css">.labelcont {border: 1px dotted black;width: 90mm;height: 29mm;}' & _
    '.labelline {display: block;line-height: 9mm;padding-left: 3mm;}</style></head>' & _
    '<body onload="javascript:window.print();">%s</body></html>'

    [/autoit][autoit][/autoit][autoit]

    $sCurrentHTML = NewLabel($sCurrentHTML, "1337", "Gebackenes Einhornfleisch", "42,00")
    $sCurrentHTML = NewLabel($sCurrentHTML, "1338", "Gedünstetes Einhornfleisch", "42,50")
    $sCurrentHTML = FinalizeLabel($sCurrentHTML)
    PrintHTML($sCurrentHTML)

    [/autoit][autoit][/autoit][autoit]

    Func PrintHTML($sHTML, $bShowIE = False)
    ;body muss onload-tag mit print-befehl haben!
    $oIE = _IECreate("", 0, $bShowIE, 1)
    _IEDocWriteHTML($oIE, $sHTML)
    WinWait("[CLASS:#32770]", "", 500) ;Klappt bei IE11
    Do
    Sleep(100)
    Until Not $oIE.busy
    _IEQuit($oIE)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func NewLabel($sCurrentHTML, $sArticleNumber, $sDescription, $sPrice)
    $sHTMLLabel = '<div class="labelcont"><span class="labelline">Art. Nr. %s</span><span class="labelline">%s</span>' & _
    '<span class="labelline">%s &euro;</span></div>'
    $sHTMLLabel = StringFormat($sHTMLLabel, $sArticleNumber, $sDescription, $sPrice)
    $sCurrentHTML = StringFormat($sCurrentHTML, $sHTMLLabel & "%s") ;%s: Platzhalter für das nächste Label
    Return $sCurrentHTML
    EndFunc ;==>NewLabel

    [/autoit][autoit][/autoit][autoit]

    Func FinalizeLabel($sCurrentHTML)
    Return StringFormat($sCurrentHTML, "")
    EndFunc

    [/autoit]