Fehler bei mehrfacher PDF-Erstellung mittels PDFtoPrinter.exe

  • 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...

  • Hallo noch mal zusammen,

    ich hab nun mal einen „Rahmen“ um die Tabellenfunktion gebastelt. Somit könnt ihr das Problem besser nachvollziehen. Dabei habe ich festgestellt, daß das Problem nicht von der MPDF.au3 sondern von der PDFtoPrinter.exe kommt.

    Spoiler anzeigen

    Spoiler

    Es wird also eine Tabelle mit 100 Einträgen erstellt. Das ergibt ein Dokument mit 3 Seiten. Nutze ich bei Zeile 179 den ShellExecute – Befehl zum Drucken wird die Tabelle ordentlich im Acrobat angezeigt und in der Warteschlange (Drucker angehalten) wird immer ein 3-seitiges Dokument angezeigt – auch bei mehrfacher Wiederholung. Benutze ich zum Drucken die PDFtoPrinter-Funktion wird die Tabelle richtig angezeigt aber in der Warteschlange steigt die Seitenzahl des Dokuments bei jeder Wiederholung um 3 Seiten, also 3 -6 – 9 usw.

    Der Fehler liegt also bei PDFtoPrinter. Dieses Programm gibt’s hier: http://www.columbia.edu/~em36/pdftoprinter.html Auch den Sourccode (AutoIt) kann man sich ansehen: http://www.columbia.edu/~em36/PDFtoPrinter.au3 Der PDFtoPrinter muß im Scriptverzeichnis liegen. Und die MDPF.au3 muß installiert sein.

    Sicherlich ist „ShellExecute(…“print“)“ eine Lösung aber die Zeit zum Öffnen des Acrobat und dann zum Drucken ist schwer abzuschätzen. Hier im Beispiel mit 10sec-Sleep eingetragen. Und ich muß den Acrobat jedes mal schließen. Je nach Rechenleistung des PC’s ist diese Zeit immer unterschiedlich. Und das plötzliche Öffnen eines neuen Fensters irritiert den Anwender.

    Hat jemand ne Idee ???

    Wenn Du's eilig hast - geh langsam...

  • De Rand Ere 7. Mai 2021 um 15:55

    Hat den Titel des Themas von „Fehler bei mehrfacher PDF-Erstellung mittels MPDF.au3“ zu „Fehler bei mehrfacher PDF-Erstellung mittels PDFtoPrinter.exe“ geändert.
    • Offizieller Beitrag

    Hat jemand ne Idee ???

    Da der Sourcecode vorliegt würde ich diesen unkompiliert ausführen. Dann bekommst du schon mal etliche Infos in die Konsole ausgegeben und kannst zusätzliche Werte von relevanten Variablen ausgeben lassen. Damit lässt sich das Problem vermutlich eingrenzen.

    Wobei es überlegenswert wäre, diesen Code umzuschreiben, neben dem nicht mehr gebräuchlichen Dim werden dort Globale Variablen innerhalb einer Funktion erstellt. Das sollte man tunlichst unterlassen. Macht den Code schwer lesbar und anfällig für Fehler.

  • BugFix : Ja danke - mach mal ist man im Kopf wie vernagelt! Nach vorne schaun, die Lösung suchen - aber die Ursache nicht prüfen... danke

    Das habe ich nun getan. Es liegt nicht an dem Script des "Herr Mendelson von der Columbia (PDFtoPrinter)". 95% dieses Scripts sind Fehlerprüfung - das brauch ich nicht, da ich den Programmaufruf exakt definieren und testen kann. Somit habe ich das Programm (PDFXcView) direkt angesprochen . Die Software arbeitet super bis zum zweiten Aufruf. Die Änderung der Einstellungen des Programms und der spezielle Import dieser - brachte auch nichts. Ich habe keine Lösung finden können. Selbst aus der DOS-Ebene heraus mit der direkten Ansprache der Software und Wiederholung des Befehls tritt der Fehler auf. Ursache ist also " PDFXcView" und dessen Speicherverwaltung ... Die Software ist gut - leider nicht geeignet für meine Anwendung. Da ich nun schon ganz paar Tage an diesem Problem rumdoktere, habe ich heute SumatraPDF implementiert. Also "nur" die EXE und die Befehlsoptionen angepasst - und es funktioniert - 2 Seiten bleiben 2 Seite , auch nach 10x aufrufen.

    Etwas nachteilig sind die etwa 10x größeren Druck-Dateien die durch SumantarPdf erzeugt werde ...

    Ich danke allen, die sich irgendwie Gedanken gemacht haben ...

    Das Thema ist erledigt.

    Wenn Du's eilig hast - geh langsam...