Probleme mit Quickpdf / HBPrinter

Moderator: Moderatoren

Antworten
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Probleme mit Quickpdf / HBPrinter

Beitrag von ramses »

Hallo zusammen

mich beschäftigt seit einiger Zeit ein Problem das ich nicht nachvollziehen kann. Vielleicht hat jemand von euch einen Tip für mich.

Ich habe HBPrintPDF / QuickPDFDll0721 / ot4xb ( 1.5.13.8 ) in ein Bestellsystem eingebaut. Mit den HBPrintPDF Funktionen erstelle ich zuerst den Packzettel eines Auftrags in eine PDF Datei, diese wird dann archiviert. Danach wird diese PDF Datei noch automatisch gedruckt. Das ganze Funktioniert in ca. 95 von 100 Fällen einwandfrei.

Die Druckfunktion ist recht einfach:

Code: Alles auswählen

function printoutPDF( fName , cDruckername )  // Aktuelle Bestellung aus webbest nach Bearbeitung drucken
local oObjPDF
  if !file( fname )
     info(" PDF-File nicht vorhanden...",.t.)
  else
        oObjPDF := hbPrintPDF():new():create() // Serial imSource von hbPrint eingebaut
        if oObjPDF:IsOK
            oObjPDF:loadFromFile( fname )
            if cDruckername = NIL
                cDruckername :=  oObjPDF:GetDefaultPrinterName()
            endif
            oObjPDF:printDocument( cDruckername ,1 , oObjPDF:PageCount(), oObjPDF:PrintOptions(1,1,"PDF-Out") )
            oObjPDF:RemoveDocument( oObjPDF:GetDocumentID() )
        endif
        oObjPDF:destroy()
  endif
return(nil)
Das Problem ist dass ab und zu das Programm nach dieser Funktion Crasht/einfriert, meist reagiert es auf keinerlei Aktionen z.B. ALT-C oder anderes mehr oder beim nächsten Klick wird die BS Maske komplett grau, beenden nur noch im TaskManager möglich oder es erscheint eine Fehlermeldung: Application Error: Exception EAccess/Violation in module UniDrv.dll at 000130e9. ....
Die Version der UNIDRV ist z.B.: 0.3.6001.22116

Das PDF wird immer korrekt gedruckt.
RemoveDocument kann auch weggelassen werden, das Problem bleibt.
Das Problem tritt bei allen verwendeten PC's auf, die sind z.Z. sehr unterschiedlichen Alter's und Configuration. (alle XP SP3)
Ohne die Druckfunktion, wenn also nur das PDF im Programm erstellt wird, tritt das Problem nicht auf.

Die die in diesem Programm eingesetzte HBPrintPDF-Klasse ist bis auf den Einbau meiner Serial(Key) im Originalzustand.

Was könnte hier wohl schief laufen?

Grüsse Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Probleme mit Quickpdf / HBPrinter

Beitrag von brandelh »

Hallo,

nach der Fehlermeldung versucht die EXE einen Speicherschreibzugriff wo sie nichts zu suchen hat.
Ob das Problem vom Druckertreiber, OT4XB oder QuickPDF kommt, kann ich aber nicht beurteilen.

Massentest habe ich nur beim Erstellen von PDF gemacht, nicht beim drucken (der arme Wald ;-) ).
Ich denke nicht, dass es mit meiner Klasse zu tun hat, da ich ja nur die Infos an die anderen DLL durchschleuse.

Ich könnte mir vorstellen, dass beim massenhaften Aufruf einer Funktion mit der Zeit eine Art von Stack überläuft,
wenn es ein Server Programm ist, solltest du versuchen es nach einiger Zeit zu beenden und neu zu starten.
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Probleme mit Quickpdf / HBPrinter

Beitrag von ramses »

Hallo Hubert

ich bin auch deiner Auffassung dass es ein Problem der DLL's ist. Nur wo suchen, resp. was umstellen?
Es ist nicht das Serverpprogramm sondern der Teil des Sachbearbeiters....
Mir ist am Anfang aufgefallen dass der Speicherverbrauch im Taskmanager mit jedem gedruckten PDF stieg, Besserung brachte dann die Funktion RemoveDocument. Heute früh ging es das Programm mit ALT-C abzuschiessen, der Fatal-Error-Log sah dann so aus:

FATAL ERROR LOG
Abort with Alt-C
SYS Thread-ID: 576
Module: EVM
Error Codes: EH: 11 Sub: 0(0) OS: 0 XPP: 0
Call Stack of Thread 1 (392):
A670EDITAUFTRAG(441)
A520BEARBEITEN(977)
A520(189)
(B)OV06(0)
OV06(194)
(B)AP00(0)
AP00(503)
MAIN(311)
Call Stack of Thread 2 (576):
File: C:\Programme\Best32\B000.exe
TimeStamp: 20101217 10:08
End of FATAL ERROR LOG.

Was deine Vermutung bestätigt.

Grüsse Carlo
Zuletzt geändert von ramses am So, 19. Dez 2010 10:58, insgesamt 1-mal geändert.
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Probleme mit Quickpdf / HBPrinter

Beitrag von brandelh »

Hi,

Pablo hat auch keine Erfahrungen mit dem Ausdrucken.

Oben habe ich was von "UNIDRV" gelesen, tritt das Problem nur bei einem Drucker auf oder bei verschiedenen ?
Wenn es bei den Clients auftritt und nicht beim Server, wäre es eine Möglichkeit ein kleines Programm zu schreiben,
das per Parameterzeile den kompletten Namen der PDF übernimmt und dann dieses ASYNCRON druckt.
Nach dem Ausdruck wird dieses beendet und somit sollte ein "Massenproblem" nicht möglich sein.

Wenn es dann damit Probleme gibt, könnte man eventuell ein gleichartiges in PowerBasic fertigen und
die Xbase++ EXE ersetzen. Tritt dann der Fehler immer noch auf, kann man dieses mit Fehlerbeschreibung
an QuickPDF senden.
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Probleme mit Quickpdf / HBPrinter

Beitrag von ramses »

Hallo Hubert

das Problem tritt bei allen Client PC's auf welche die Druckfunktion nutzen. Als Drucker sind Netzwerkdrucker von Brother und HP im Einsatz. Die sind alle als Locale Drucker auf den Clients als IP Drucker installiert.

Das Erstellen der PDF ist monatelang absolut problemlos gelaufen, ich hatte bis vorletzte Woche 2 Druckroutinen im Programm die erste erstellte die PDF die zweite den Ausdruck auf den Drucker. Dann kam die Anforderderung das archiverte PDF soll mit dem Ausdruck absolut identisch sein, ich begann das PDF nach dem erstellen wie erwähnt zu Drucken und die Probleme begannen....

Das Asynchrone Drucken ist meine absolute Notlösung, Ich habe schon ein entsprechendes Druckprogramm erstellt dem der PDF-Name und Druckername zum Drucken angegeben werden kann. Ich sträube mich noch vom Konzept "Gesamte APP in einer EXE" abzuweichen. Vorallem aus solchen Gründen.....

Auch ein Update auf die neue ot4xb 1.5.16.210 und Quickpdf 722 änderte nichts.

Dann habe ich in der Destroy Methode von HPPrintPDF auch ein Unload-DLL für die Quickpdf eingebaut, auf meinem Rechner konnte ich das Problem/Fehler mit dieser änderung bis jetzt nicht mehr nicht mehr erzeugen. Morgen muss mein Kunde testen ....

Sicher nicht die Optimale Lösung vielleicht Hilfts

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Probleme mit Quickpdf / HBPrinter

Beitrag von Koverhage »

Hallo Carlo,

ich hatte hier schon berichtet, das der Druck nicht funktioniert, wenn der als UNC bzw. IP Drucker angegeben wird.

D.,h. der Name darf z.B.
HP Laserjet 4
sein, aber nicht
\\Server\HP Laserjet 4
oder
IP Adresse

Das ist aber definitiv ein Problem von QuickPDF
Gruß
Klaus
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Probleme mit Quickpdf / HBPrinter

Beitrag von ramses »

Hallo Klaus

die Druckfunktion bekommt kein Druckername angegeben. Sie bestimmt mit dem Aufruf GetDefaultPrinterName() der Quickpdf den Standard Drucker des Clients für die Druckausgabe.

Ist womöglich der Aufruf dieser Funktion Ursache allen übels?

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Probleme mit Quickpdf / HBPrinter

Beitrag von brandelh »

ramses hat geschrieben: Dann habe ich in der Destroy Methode von HPPrintPDF auch ein Unload-DLL für die Quickpdf eingebaut, auf meinem Rechner konnte ich das Problem/Fehler mit dieser änderung bis jetzt nicht mehr nicht mehr erzeugen. Morgen muss mein Kunde testen ....
Sicher nicht die Optimale Lösung vielleicht Hilfts
wenn es dir im CLIENT hilft ist das OK, aber auf Server-Seite könnte es Probleme geben.

Beim UNLOAD der DLL gibt QuickPDF den Speicher nicht ordentlich frei.
Das KÖNNTE bei dir dazu führen, dass der Fehler nicht mehr auftritt, wenn du aber viele PDF erzeugst, wächst die EXE Dateigröße ständig, bis die EXE beendet wird. Danach wird dieser frei gegeben.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Probleme mit Quickpdf / HBPrinter

Beitrag von brandelh »

ramses hat geschrieben:Das Asynchrone Drucken ist meine absolute Notlösung, Ich habe schon ein entsprechendes Druckprogramm erstellt dem der PDF-Name und Druckername zum Drucken angegeben werden kann. Ich sträube mich noch vom Konzept "Gesamte APP in einer EXE" abzuweichen. Vorallem aus solchen Gründen.....
da bin ich völlig anderer Meinung. Wenn es im Hauptprogramm Ärger gibt, ist die Auslagerung auch deshalb sinnvoll, weil:

1. Wenn die Druckroutine abbricht, besteht die Hoffnung, dass das steuernde Programm aus dem Main Thread weiter läuft.
2. Asyncrone Ausführung von 2 unabhängigen EXE Programmen können auf 2 Prozessoren laufen (ok, bei Xbase hilft das nicht wirklich).
3. Das asyncrone Druckprogramm kann in einer anderen Programmiersprache (von QuickPDF direkt unterstützt) ausgeführt werden und somit hat man dann die Möglichkeit die Fehler direkt zu melden.
Gruß
Hubert
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Probleme mit Quickpdf / HBPrinter

Beitrag von Koverhage »

Hallo Carlo,
kann ich nicht beurteilen, ich mache es so:

if drpreview
ZeigePDFDatei(cAusgabeDir+"\",drtitle)
else
cPdfDrucker := pObj:NewCustomPrinter(drname)
pObj:SetupCustomPrinter(cPdfDrucker,4,drkopien)
pObj:SetupCustomPrinter(cPdfDrucker,7,drduplex)
pObj:SetupCustomPrinter(cPdfDrucker,9,drschacht)
pObj:SetupCustomPrinter(cPdfDrucker,11,drquer)
pObj:PrintDocument(cPdfDrucker,1,pObj:PageCount())
endif

Tatsache ist, das es nicht funktioniert, wenn der Drucker
als \\Server\HP Laserjet 4 oder als IP-Adresse angegeben wird.

Da GetDefaultPrinterName (je nachdem wie die Drucker eingerichtet sind) solche Namen zurückgibt,
vermute ich das es deshalb nicht funktioniert.
Bei einem Kunden hatte der Netzwerk Administrator die Drucker generell in der Form \\Server\Druckername angelegt.
Nachdem der Drucker auf dem die PDF Datei ausgedruckt werden sollte, normal angelegt wurde, hat alles funktioniert.
Gruß
Klaus
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Probleme mit Quickpdf / HBPrinter

Beitrag von ramses »

Hallo zusammen

leider hat es auch mit dem Unload der QuickPDF nichts gebracht und das Problem besteht weiter. Die Error-Logs bei den durch ALT-C möglichen Abbrüchen des "hängenden" Programms von heute zeigen immer Alt-C im "Module: EVM" an jedoch immer in verschiedenen Programmmodulen z.T. an Stellen die seit Jahren unverändert gelaufen sind. Ich versuche jetzt doch wie Hubert schreibt das asynchrone Drucken, es passt mir zwar ganz und gar nicht, aber das Wohl der Sachbearbeiter geht vor....

@Klaus
Ich sehe was du meinst, jedoch habe ich infolge verschiedener Probleme seit langem nirgendwo mehr Drucker installiert die über UNC Pfade oder über Server drucken! Die Drucker heissen schlicht z.B. "HP-Laserjet-CM6040" und sind ausschliesslich lokal installiert. D.h. die Drucken auch wenn der Server down ist.

Gruss Carlo
Valar Morghulis

Gruss Carlo
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Probleme mit Quickpdf / HBPrinter

Beitrag von ramses »

Hallo zusammen

nach einem Tag des Testens bei Kunden steht nun fest dass mein Problem 2 eindeutigt verifizierte Ursachen hat:

a) Der Fehler "Application Error: Exception EAccess/Violation in module UniDrv.dll at 000130e9. ...." und das Einfrieren des Programms wenn ALT-C nicht zum Programm-Abbruch führt liegt im der Druckausgabe und QuickPDF kann mit asynch. Drucken oder Unload der QuickPDF nach jeder Verwendung beseitigt werden.

b) Der Fehler wenn sich die hängende APP mit ALT-C beenden lässt, hat die Ursache darin dass ich die Maske in der am Schluss die Druckausgabe des PDF's erfolgt um 3 Zeilen vergrössere (XBPCrt) und beim verlassen wieder verkleinere, dies ist anscheinend ein bekanntes Verhalten das irgendwann zu variablen Fehlern führt, es gibt dazu ein PDR 6256 Diese änderung habe ich gleichzeitig mit der Druckausgabe eingebaut.

Mal schauen wie lange es dauert bis ich von Alaska eine neue Subcription bekomme, die den Fix 35 für den PDR 6256 enthält, Bestellt und Bezahlt habe ich (zwangsweise) ....... für die beseitigung eines Fehler's .....

Gruss Carlo
Valar Morghulis

Gruss Carlo
Antworten