Hallo zusammen,
seit längerem wende ich mich mal wieder mit einem Problem an Euch und ich hoffe Euch fällt dazu etwas ein.
Vor ca. 2 Jahren habe ich eine stochastische Lagerverwaltung für "bewegliche Güter(Pakete)" geschrieben. Die läuft auch gut - hat aber immer wieder Probleme mit dem IE. Die Generierung von notwendigen Tabellen hatte ich mittels HTML gelöst. Ich erstellte im IE eine leere Seite und generierte dann meine Tabellen. Mit der Umstellung von MS auf Edge gibt es da immer wieder Probleme, da im IE "Werbeseiten" eingeblendet werden und eine leere Seite nicht aufgerufen wird bzw. nicht angesprochen wird oder kann.
Somit hab ich mich entschlossen die Tabellen in einem PDF-Dokument zu erzeugen. Werkzeug dazu ist die MPDF.au3. Nach reichlich Testen und Probieren funzt das nun auch alles super.
ABER es gibt Probleme - genauer nur noch ein Problem!
Vor 2 Tagen hatte ich noch das Problem, daß ich bei mehrfachen Aufruf der TabebellenGenerator-Funktion sich die Seitenzahl aller, seit Laufzeitbeginn erstellten PDF-Dokumente addierte. Das konnte ich lösen, in dem ich die globale Variable der MPDF.au3 "$_Pages" immer wieder auf "0" setze.
Nun das aktuelle Problem:
Ich generiere ein Dokument mit 1 Seite. In der Druckerwarteschlange (zum Test angehalten) wird ein Dokument mit 1 Seite angezeigt. Ich wiederhole das noch mal - in der Druckerwarteschlange wird ein Dokument mit 2 Seiten angezeigt. Wiederholung - 3 Seiten, Wiederholung 4 Seiten ... Dokument mit 12 Seiten = 16 Seiten in der Druckerwarteschlange ...
Ich benutze zum ungestörtem Drucken PDFtoPrinter. Das habe ich gerade überprüft. Sobald der Druck durch ist wird das Temp-Verzeichnis gelöscht und zu jedem neuem Druck neu aufgerufen / ins Temp geschrieben. Das kann es nicht sein - denke ich ...
Auch die "Minuten-Sekunden-genaue" Bezeichnung des generierten PDF-Dokuments half nicht weiter. Mein Gedanke war, daß es dann verschiedene Dateien sein müßten.
Ich denke der "Fehler" liegt in der MPDF.au3.
Bei mehrfachem Aufruf der Funktionen wird der "Zwischenspeicher" nicht gelöscht und alle neu generierten Dokumente hinten ran geschrieben. Erst wenn ich mein Script beende und neu starte - wird MPDF.au3 neu geladen und das Spiel fängt von vorne an.
Leider bin ich in der objektorientierten bzw. in der windowsinternen Programmierung nicht so toll bewandert.
Hier ein Beispiel zur Druckerwarteschlange:
Erklärung zum Bild:
1. Dokument - 1 Seite
2. Dokument - 1 Seite
3. Dokument - 1 Seite
4. Dokument - 12 Seiten
Und das ist meine Funktion zur Generierung der Tabellen - leider nicht lauffähig. Die etwas über 2000 Zeilen wollt ich hier nicht rein stellen und um diese Funktion einen Rahmen zu basteln hatte ich noch nicht die Zeit.
Spoiler anzeigen
Func _Liste_drucken($aDBank, $iListe, $vV, $vP)
Local $vTabellenName, $vSpalte1_Kopf, $vSpalte2_Kopf, $vSpalte3_Kopf, $vSpalte4_Kopf, $vSpalte5_Kopf, $vSpalte6_Kopf, $vSpalte6_Kopf
Global $vLogDateiName
If $iListe > 2 Then $vLogDateiName = StringTrimRight($vLogDateiName,5)
;setze die PDF - HeaderEinträge
_SetTitle("Listen Druck")
_SetSubject("Firma")
_SetKeywords("")
_OpenAfter($vV) ;open after generation
_SetUnit($PDF_UNIT_CM)
_SetPaperSize("A4")
_SetZoomMode($PDF_ZOOM_CUSTOM, 100)
_SetOrientation($PDF_ORIENTATION_PORTRAIT)
_SetLayoutMode($PDF_LAYOUT_CONTINOUS)
;initialize the pdf
Local $vPDFDatei = "\etc\Listendruck_" & @MIN & "-" & @SEC &".pdf"
_InitPDF(@ScriptDir & $vPDFDatei)
_LoadFontTT("F1", $PDF_FONT_TIMES,$PDF_FONT_BOLDITALIC)
_LoadFontTT("_Calibri", $PDF_FONT_CALIBRI)
_SetColourFill(0x000000)
_SetColourStrokE(0x000000)
Local $vTxtUnterkante = 26.5 ; Unterkante der Texte in der kopfzeile
Local $vTabellenZeilen = $vLaenge_PaketListe ; Anzahl der gesamten Zeileneinträge in der Tabelle. Auf eine Seite passen 45 Zeilen.
Local $vZeilen = 45 ; Zeilen, die auf eine Seite passen
Local $vSeiten = Round(Int($vTabellenZeilen / 45)) + 1 ;notwendige Seiten berechnen
Local $vStartNumTab = 0
If $vTabellenZeilen < $vZeilen Then
$vZeilen = $vTabellenZeilen
EndIf
Local $vEndeNumTab = $vZeilen
ConsoleWrite("TabZeilen: " & $vTabellenZeilen & " - Seiten: " & $vSeiten & @CR)
For $J = 1 to $vSeiten
_BeginPage()
$vSpalte1_Kopf = "EAN - Code"
$vSpalte2_Kopf = "Name des Empfängers"
$vSpalte3_Kopf = "Lagerfach"
$vSpalte4_Kopf = "lfd Nummer"
$vSpalte5_Kopf = "Zulauf"
$vSpalte6_Kopf = "Rücksendung"; Bezeichnung ???? eventuell Daten des Zulaufs ... unklar ....
$vSpalte7_Kopf = "gebucht"
_Draw_Rectangle(1.5, 26.3, 18.3, 2, $PDF_STYLE_STROKED, 0, 0xefefef, 0.05) ; Rahmen Tabellenkopf
Switch $iListe
Case 1
;Tabellenkopf zusammenstellen
$vTabellenName = "Paketbestandsliste vom " & @MDAY&"."&@MON&"."&@YEAR&" - "&@HOUR&":"&@MIN&":"&@SEC & " Uhr"
_DrawText( 19.8, 28.5, $vTabellenName, "F1", 14, $PDF_ALIGN_RIGHT) ; TabellenName
_DrawText( 03.2, $vTxtUnterkante, $vSpalte1_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER); Spalte1_Kopf
_DrawText( 05.0, $vTxtUnterkante, $vSpalte2_Kopf, "_Calibri", 10, $PDF_ALIGN_LEFT); Spalte2_Kopf
_DrawText( 13.5, $vTxtUnterkante, $vSpalte3_Kopf, "_Calibri", 10, $PDF_ALIGN_LEFT,90) ; Spalte3_Kopf
_DrawText( 14.3, $vTxtUnterkante, $vSpalte4_Kopf, "_Calibri", 9, $PDF_ALIGN_LEFT,90) ; Spalte4_Kopf
_DrawText( 15.5,$vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte5_Kopf - 1. Zeile
_DrawText( 15.5, $vTxtUnterkante, $vSpalte5_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte5_Kopf - 2. Zeile
_DrawText( 17.8, $vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte6_Kopf - 1. Zeile
_DrawText( 17.8, $vTxtUnterkante, $vSpalte6_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte6_Kopf - 2. Zeile
_DrawText( 19.5, $vTxtUnterkante, "Check", "_Calibri", 10, $PDF_ALIGN_LEFT,90) ;
local $vXSpalte_1 = 01.5 ; Definition der Spaltenlinien X-Achse
local $vXSpalte_2 = 04.8
local $vXSpalte_3 = 13.0
local $vXSpalte_4 = 13.8
local $vXSpalte_5 = 14.5
local $vXSpalte_6 = 16.7
local $vXSpalte_7 = 19.0
local $vXSpalte_8 = 19.8
Local $vXTxtSpalte_1 = 03.2 ; Definition des Textbegin X-Achse
local $vXTxtSpalte_2 = 05.0
local $vXTxtSpalte_3 = 13.4
local $vXTxtSpalte_4 = 14.2
local $vXTxtSpalte_5 = 15.6
local $vXTxtSpalte_6 = 17.9
$vTabStartY = 25.8
$Y = -0.2
For $I = $vStartNumTab to $vEndeNumTab - 1
$vEmpfaenger = $aDBank[$I][1]
If StringLen($vEmpfaenger)>= 50 Then
$vEmpfaenger = StringLeft($vEmpfaenger,47) & "..."
EndIf
;~ ConsoleWrite("Case 2 - $vEmpfaenger: " & $vEmpfaenger & @CR)
_DrawText( $vXSpalte_1 -0.1, $vTabStartY , $I + 1, "_Calibri", 6, $PDF_ALIGN_RIGHT)
_DrawText( $vXTxtSpalte_1, $vTabStartY , $aPakete[$I][0], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_2, $vTabStartY , $vEmpfaenger, "_Calibri", 10, $PDF_ALIGN_LEFT) ; max 43 Zeichen
_DrawText( $vXTxtSpalte_3, $vTabStartY , $aDBank[$I][2], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_4, $vTabStartY , $aDBank[$I][3], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_5, $vTabStartY , $aDBank[$I][4], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_6, $vTabStartY , $aDBank[$I][5], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawLine($vXSpalte_1,$vTabStartY - 0.15,19.8,$vTabStartY + $Y, $PDF_STYLE_STROKED, 0, 0,0.05)
$vTabStartY += -0.55
Next
Case 2
$vTabellenName = "Paket - Rücksendeliste vom " & @MDAY&"."&@MON&"."&@YEAR&" - "&@HOUR&":"&@MIN&":"&@SEC & " Uhr"
_DrawText( 19.9, 28.5, $vTabellenName, "F1", 16, $PDF_ALIGN_RIGHT) ; TabellenName
_DrawText( 03.2, $vTxtUnterkante, $vSpalte1_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER); Spalte1_Kopf
_DrawText( 05.0, $vTxtUnterkante, $vSpalte2_Kopf, "_Calibri", 10, $PDF_ALIGN_LEFT); Spalte2_Kopf
_DrawText( 13.5, $vTxtUnterkante, $vSpalte3_Kopf, "_Calibri", 10, $PDF_ALIGN_LEFT,90) ; Spalte3_Kopf
_DrawText( 14.3, $vTxtUnterkante, $vSpalte4_Kopf, "_Calibri", 9, $PDF_ALIGN_LEFT,90) ; Spalte4_Kopf
_DrawText( 15.5,$vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte5_Kopf - 1. Zeile
_DrawText( 15.5, $vTxtUnterkante, $vSpalte5_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte5_Kopf - 2. Zeile
_DrawText( 17.8, $vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte6_Kopf - 1. Zeile
_DrawText( 17.8, $vTxtUnterkante, $vSpalte6_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte6_Kopf - 2. Zeile
_DrawText( 19.5, $vTxtUnterkante, "Check", "_Calibri", 10, $PDF_ALIGN_LEFT,90) ;
local $vXSpalte_1 = 01.5 ; Definition der Spaltenlinien X-Achse
local $vXSpalte_2 = 04.8
local $vXSpalte_3 = 13.0
local $vXSpalte_4 = 13.8
local $vXSpalte_5 = 14.5
local $vXSpalte_6 = 16.7
local $vXSpalte_7 = 19.0
local $vXSpalte_8 = 19.8
Local $vXTxtSpalte_1 = 03.2 ; Definition des Textbegin X-Achse
local $vXTxtSpalte_2 = 05.0
local $vXTxtSpalte_3 = 13.4
local $vXTxtSpalte_4 = 14.2
local $vXTxtSpalte_5 = 15.6
local $vXTxtSpalte_6 = 17.9
$vTabStartY = 25.8
$Y = -0.2
;~ Daten werden aus dem ListView gelesen
Local $vNr = _GUICtrlListView_GetItemCount($idPaketListe)
;~ ConsoleWrite("Case 2 - $vNr: " & $vNr & @CR)
For $I = 0 To $vNr - 1
If _GUICtrlListView_GetItemChecked($idPaketListe, $I) = True Then
$vEmpfaenger = _GUICtrlListView_GetItemText($idPaketListe, $I, 1)
If StringLen($vEmpfaenger)>= 50 Then
$vEmpfaenger = StringLeft($vEmpfaenger,47) & "..."
EndIf
ConsoleWrite("Case 2 - $vEmpfaenger: " & $vEmpfaenger & @CR)
Local $vText1 = _GUICtrlListView_GetItemText($idPaketListe, $I, 0)
Local $vText3 = _GUICtrlListView_GetItemText($idPaketListe, $I, 2)
Local $vText4 = _GUICtrlListView_GetItemText($idPaketListe, $I, 3)
Local $vText5 = _GUICtrlListView_GetItemText($idPaketListe, $I, 4)
Local $vText6 = _GUICtrlListView_GetItemText($idPaketListe, $I, 5)
_DrawText( $vXSpalte_1 -0.1, $vTabStartY , $I + 1, "_Calibri", 6, $PDF_ALIGN_RIGHT)
_DrawText( $vXTxtSpalte_1, $vTabStartY , $vText1, "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_2, $vTabStartY , $vEmpfaenger, "_Calibri", 10, $PDF_ALIGN_LEFT) ; max 43 Zeichen
_DrawText( $vXTxtSpalte_3, $vTabStartY , $vText3, "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_4, $vTabStartY , $vText4, "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_5, $vTabStartY , $vText5, "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_6, $vTabStartY , $vText6, "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawLine($vXSpalte_1,$vTabStartY - 0.15,19.8,$vTabStartY + $Y, $PDF_STYLE_STROKED, 0, 0,0.05)
$vTabStartY += -0.55
EndIf
Next
Case 3 To 5 ; 3 = Zulauf, 4 = Ausgabe, 5 = PRS
;~ $vTabellenName = "Log-Datei: " & $vLogDateiName
$vSpalte7_Kopf = "gebucht"
If $iListe = 3 Then
_DrawText( 19.0, 28.6, "Paket - Zulauf Log-Datei: " & $vLogDateiName, "F1", 16, $PDF_ALIGN_RIGHT)
ElseIf $iListe = 4 Then
_DrawText( 19.0, 28.6, "Paket - Ausgabe Log-Datei: " & $vLogDateiName, "F1", 16, $PDF_ALIGN_RIGHT)
ElseIf $iListe = 5 Then
_DrawText( 19.0, 28.6, "Paket - Rücksendung Log-Datei: " & $vLogDateiName, "F1", 16, $PDF_ALIGN_RIGHT)
EndIf
;~ _DrawText( 13.0, 28.5, $vTabellenName, "_Calibri,Bold", 14, $PDF_ALIGN_LEFT)
_DrawText( 3.2, $vTxtUnterkante, $vSpalte1_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( 05.0, $vTxtUnterkante, $vSpalte2_Kopf, "_Calibri", 10, $PDF_ALIGN_LEFT)
_DrawText( 12.5, $vTxtUnterkante, $vSpalte3_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER,90)
_DrawText( 13.4, $vTxtUnterkante, $vSpalte4_Kopf, "_Calibri", 9, $PDF_ALIGN_CENTER,90)
_DrawText( 13.7,$vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte5_Kopf - 1. Zeile
_DrawText( 13.70, $vTxtUnterkante, $vSpalte5_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ;
_DrawText( 15.95, $vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte6_Kopf - 1. Zeile
_DrawText( 15.95, $vTxtUnterkante, $vSpalte6_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ;
_DrawText( 18.30, $vTxtUnterkante + 0.5, "Datum | Zeit", "_Calibri", 10, $PDF_ALIGN_CENTER) ;
_DrawText( 18.30, $vTxtUnterkante, $vSpalte7_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ;
local $vXSpalte_1 = 01.5 ; Definition der Spaltenlinien X-Achse
local $vXSpalte_2 = 04.8
local $vXSpalte_3 = 11.3
local $vXSpalte_4 = 12.1
local $vXSpalte_5 = 12.9
local $vXSpalte_6 = 14.9
local $vXSpalte_7 = 17.0
local $vXSpalte_8 = 19.8
Local $vXTxtSpalte_1 = 03.15 ; Definition des Textbegin X-Achse
local $vXTxtSpalte_2 = 04.9
local $vXTxtSpalte_3 = 11.7
local $vXTxtSpalte_4 = 12.5
local $vXTxtSpalte_5 = 13.9
local $vXTxtSpalte_6 = 16.0
local $vXTxtSpalte_7 = 18.4
$vTabStartY = 25.8
$Y = -0.2
For $I = $vStartNumTab to $vEndeNumTab - 1
$vEmpfaenger = $aDBank[$I][1]
If StringLen($vEmpfaenger)>= 34 Then
$vEmpfaenger = StringLeft($vEmpfaenger,33) & "..."
EndIf
_DrawText( $vXSpalte_1 -0.1, $vTabStartY , $I + 1, "_Calibri", 6, $PDF_ALIGN_RIGHT)
_DrawText( $vXTxtSpalte_1, $vTabStartY , $aDBank[$I][0], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_2, $vTabStartY , $vEmpfaenger, "_Calibri", 10, $PDF_ALIGN_LEFT) ; max 43 Zeichen
_DrawText( $vXTxtSpalte_3, $vTabStartY , $aDBank[$I][2], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_4, $vTabStartY , $aDBank[$I][3], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_5, $vTabStartY , $aDBank[$I][4], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_6, $vTabStartY , $aDBank[$I][5], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_7, $vTabStartY , $aDBank[$I][6]& "|"&$aDBank[$I][7], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawLine($vXSpalte_1,$vTabStartY - 0.15,19.8,$vTabStartY + $Y, $PDF_STYLE_STROKED, 0, 0,0.05) ; Zeilenabschlußlinie zeichnen
$vTabStartY += -0.55
Next
EndSwitch
$vTabStartY += 0.55 - 0.1 ; Zeile berechnen
;~ senkrechte Linien zeichnen
Local $vLinienEnde = 26.3 - 2 -$vZeilen * 0.415
_DrawLine($vXSpalte_1,$vTabStartY,$vXSpalte_1,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_2,$vTabStartY,$vXSpalte_2,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_3,$vTabStartY,$vXSpalte_3,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_4,$vTabStartY,$vXSpalte_4,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_5,$vTabStartY,$vXSpalte_5,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_6,$vTabStartY,$vXSpalte_6,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_7,$vTabStartY,$vXSpalte_7,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_8,$vTabStartY,$vXSpalte_8,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawText( 19.8, 1, $vVersion & " - Seite "& $J & " von " & $vSeiten, "_Calibri", 10, $PDF_ALIGN_RIGHT) ; Fußzeile
_EndPage() ;write the buffer to disk
If $vEndeNumTab < $vTabellenZeilen Then
$vStartNumTab = $vEndeNumTab ;+ 1
If $vStartNumTab + 45 >= $vTabellenZeilen Then
$vEndeNumTab = $vTabellenZeilen
Else
$vEndeNumTab = $vStartNumTab + 45
EndIf
EndIf
Next
_ClosePDFFile()
$_Pages = 0 ; Seitenzahl in der MPDF.au3 wieder auf '0' setzen
;~ autoDruckfunktion aktivieren/deaktivieren
If $vP = True Then
;~ $vProgramm = ""
Local $vProgramm = @ScriptDir & "\etc\PDFtoPrinter.exe " & @ScriptDir & $vPDFDatei
;~ ConsoleWrite("Programm: " & $vProgramm & @CR)
$idAcrobat = RunWait($vProgramm, "", "")
EndIf
Ich danke Euch für Eure Mühen und verbleibe mit Besten Dank...