Dateien sicher schreiben

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Dateien sicher schreiben

Beitrag von Jan »

Moin,

wir kämpfen gerade mit folgendem Problem: Ich erstelle mit Edgars Klasse PDF, die aus einem größeren Hintergrundbild (3-4 MB groß) und individuellem Text bestehen. Die wird auf einem Windows Server 2012 gespeichert, und dann direkt ausgedruckt. Clients sind alle Windows 10.

Nun kommt es seit einiger Zeit vor, das nur der Zusatztext gedruckt wird. Nicht die Grafik. Oftmals klappt der Ausdruck komplett, allzuoft aber eben nur der Text. Wenn man sich dann die PDF auf dem Server ansieht, ist die aber vollständig. Ein manueller Druck aus dem Adobe Reader ist vollständig, aber zu dem Zeitpunkt ist natürlich auch schon wesentlich mehr Zeit vergangen.

Mein Verdacht ist, das es ein Caching-Problem gibt. Das die PDF zum Zeitpunkt des Druckes noch nicht komplett auf die Festplatte geschrieben ist.

Edgar hat die Druckroutine mit seiner aktuellen Klasse umgeschrieben. Aber auch die Verwendung der alten Version gibt den gleichen Fehler. Das können wir also ausschließen.

Gibt es eine Möglichkeit sicherzustellen, das eine Datei komplett auf dem Server weggeschrieben ist (sozusagen ein File-Commit)? Oder vor dem Drucken festzustellen, ob die nun komplett geschrieben worden ist, und eben so lange zu warten?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Bertram Hansen »

Jan,

nur so aus dem Bauch heraus.
Kannst du nicht vor dem Drucken versuchen die PDF exklusiv zu öffnen.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Martin Altmann »

Jan,
ich nehme mal an, dass Du auch ein ::EndDoc(.f.) gefolgt von einem ::Destroy() für Dein PDF-Objekt machst, bevor Du es anzeigen lässt - oder?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan »

Hallo Martin,

nein. Weil nach dem :create() direkt das :print() folgt. Bzw. ich habe da mal eine Verzögeurng von 3 Sekunden eingebaut, um dem Server etwas Zeit zum Speichern zu geben. Die Verbesserung war aber nur minimal.

Die Idee ist aber interessant. Ich werde mal schauen, ob ich damit was anfangen kann.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Martin Altmann »

Bei mir hatte es damals geholfen. Ich schreibe tausende zweiseitige PDFs und versende die im Anschluss per Mail.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan »

Bertram,

vor dem Drucken öffne ich die Datei per FOpen(), FRead(), FClose(), um die Größeneinstellungen des Dokumentes zu erhalten (das kann DIN A 4 oder DIN A 6 sein).

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan »

Martin,

das versenden der Mail im Anschluß klappt auch. Aber auch dann ist ja schon ein wenig mehr Zeit vergangen.

Und im Gegensatz zu Deinen PDF (ich setze das jetzt mal einfach voraus) sind meine umfangreicher. Durch das Hintergrundfoto. Und nur das fehlt in den direkten Ausdrucken. Der normale Text ist da, inkl. mehrere Dutzend "gemalter" Linien im Barcode.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Martin Altmann »

Nicht unbedingt!
Ich nutze eine PDF-Vorlage (wie Du), in die ich Text einmische!
Die PDF-Vorlage kann Text enthalten (wenn sie ordentlich aus der Druckerei kommt) - sie kann aber auch zwei ganzseitige Grafiken enthalten (wenn das Papier manuell gescannt und als PDF gespeichert wurde).

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan »

Martin,

ich habe mich vertan. Doch, das PDF-Objekt wird nach dem Erzeugen der PDF destroyed und genillt, danach erst wird ein neues Druck-Objekt erstellt, mit dem die gespeicherte PDF dann gedruckt wird.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Martin Altmann »

Jan,
worauf ich hinaus wollte: Mach ::EndDoc( .f. ) und öffne nach dem ::Destroy() die Datei zum Anzeigen manuell.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan »

:?:
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Martin Altmann »

Wenn Du dein fertiges PDF anzeigst, dann machst Du ja wahrscheinlich ein :EndDoc( .t. ) - oder? Damit wird das sofort angezeigt.
In dem Fall ist es besser, das PDF zu erzeugen, alle Objekte wegzuschmeißen und danach ein Objekt zu erzeugen, das zur Anzeige der Datei genutzt wird (also die Datei von der Platte lädt).

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan »

Martin,

ich hatte mich doch oben korrigiert und geschrieben, das ich das PDF-Erzeugungsobjekt destroye und nille, und dann erst das PDF-Druckobjekt erstelle. Genau das, was Du ganz oben vorgeschlagen hattest.

Von daher verstehe ich Deinen erneuten Vorschlag nicht. Auch nach Deiner Erklärung nicht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Martin Altmann »

Ach so!
Ich dachte, Du hast das Problem bei der Anzeige des frisch erstellten Dokumentes. Dann warte doch einfach 5 Minuten bis zum Ausdrucken - aber ähnliches machst Du ja schon.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan »

Martin,

naja, 5 Minuten warten kommt nicht so gut, wenn der Kunde daneben steht und wartet. Ansonsten hätte ich die Wartezeit ja auch selber schon angehoben.

Ich denke das geht nur über irgendwelche Servereinstellungen oder anderes Sicherstellen, das die Datei iwrklich sofort komplett weggeschrieben wird.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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: Dateien sicher schreiben

Beitrag von Koverhage »

Jan,
wie wäre es mit local speichern. drucken und auf server kopieren und local löschen ?
Gruß
Klaus
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan »

Hallo Klaus,

nette Idee. Die mich erstmal positiv angesprochen hat. Aber die einen kompletten Umbau der Logik bedeuten würde.

Das gesamte Programm ist so gebaut, das Kundenbelege beim Ausdruck immer als PDF gespeichert werden. Das betrifft Angebote, Auftragsbestätigungen, Rechnungen, die hier relevanten Gutscheine, und so manches mehr. Das heißt, es gibt diverse Funktionen, die die entsprechenden PDF generieren und speichern. Die Druckfunktion liegt komplett woanders im Code und wird dann nur bei Bedarf aufgerufen. Entweder nach der Erzeugung der PDF, oder später bei einem Nachdruck, oder bei einem Mailversand des Dokumentes. Drucken und mailen gehen immer auf die gespeicherte PDF, niemals in eine wirkliche Druckfunktion.

Wenn ich also erst lokal speichere, und erst später auf den Server schiebe, dann muß ich das irgendwie abstimmen mit einem eventuell nachfolgenden Druckauftrag. Das wird komliziert. Vor Allem, weil meine Vorgänger in dem Projekt nun ja, sagen wir mal, etwas unordentlich gearbeitet haben was Funktionsaufrufe, Variablen, usw. betrifft. Ich muß da mit einer Menge Altlasten klar kommen.

Ich werde mir das aber mal anschauen, vielleicht kann ich das mit irgend einer Paramterübergabe (mein Kunde hast Parameterübergaben, weil er die nicht versteht) doch irgendwie halbwegs schmerzfrei testen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Dateien sicher schreiben

Beitrag von Werner_Bayern »

Code: Alles auswählen

      if file(MAILVERZEICHNIS + cPDF_Datei)
         sleep(30)
         for i := 1 to 20
            if .not. (nDatei := fopen(MAILVERZEICHNIS + cPDF_Datei, FO_READ+FO_DENYREAD)) == -1 // Datei konnte erfolgreich geöffnet werden
               fclose(nDatei)
               exit
            endif
            sleep(30)
         next i
         sleep(30)
      endif
      if .not. file(MAILVERZEICHNIS + cPDF_Datei) .or. i == 21
         hinweis("PDF-Druck", "Bitte kurz warten, bis der PDF-Druck abgeschlossen ist...")
      endif
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von Jan »

Hallo Werner,

ein FOpen() etc. mache ich schon (siehe weiter oben). Aber die mehrfachen Sleep(30) sind einfach nicht machbar. So lange wartet kein Mitarbeiter im kundenstreß auf den Ausdruck, geschweige denn ein wartender Kunde in der Schlange.

Ich kann aber mal schauen, ob ein kurzes Warten nach dem FClose() helfen könnte. Vorher habe ich ja schon eine Verzögerung eingebaut.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Dateien sicher schreiben

Beitrag von Werner_Bayern »

Jan hat geschrieben:Aber die mehrfachen Sleep(30) sind einfach nicht machbar. So lange wartet kein Mitarbeiter im kundenstreß auf den Ausdruck, geschweige denn ein wartender Kunde in der Schlange.
Würd ich auch nie programmieren! :)
Wir sprechen hier von erstmal 30 ms, nur wenn dann noch nicht die Datei da oder komplett geschrieben ist, wird max. 20x a 30 ms gewartet. Du kannst Dir die Schleife ja anpassen, mach halt bloß 5 Durchgänge. Wir sprechen bei 20 Durchläufen von 630 ms, das sind 6,3 Sekunden - wenn es ein Geschwindigkeitsproblem gibt! Nur dann.

Also, ist das Netzwerk ok und der Fileserver "schnell" genug, hält der Code nichts auf, ansonsten wartet er max. 6,6 Sekunden, bis eine Meldung ausgegeben wird. Wenn Du i anpasst, dann halt entsprechend schneller.

Ich denke, besser kannst Du das Problem softwaremäßig in Deiner Applikation nicht bedienen - bis mich jemand vom Gegenteil überzeugt. 8)
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Dateien sicher schreiben

Beitrag von AUGE_OHR »

Jan hat geschrieben:... die aus einem größeren Hintergrundbild (3-4 MB groß) und individuellem Text bestehen.
Frage : was für ein Drucker und wie viel Speicher (RAM) hat der Drucker ?

ich hatte früher (v1.5x) mal ein ähnliche Problem mit Word Dateien die ich per Runshell() gedruckt hatte.
es fehlten teilweise die Grafiken aber der Text war meistens komplett. Die Doc war immer komplett.

da es viele DOC Dateien waren kamen wir auf die Idee den Drucker (Kyrocera) aufzurüsten mit mehr RAM und danach gab es keine Problem mehr.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Dateien sicher schreiben

Beitrag von brandelh »

wie wäre es mit PDF auf dem servr schreiben und schließen,
danach auf lokale platte kopieren und von dort drucken ?
Gruß
Hubert
Benutzeravatar
mikehoffmann
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 133
Registriert: Mo, 21. Sep 2015 16:22
Hat sich bedankt: 1 Mal
Danksagung erhalten: 18 Mal

Re: Dateien sicher schreiben

Beitrag von mikehoffmann »

Google mal nach der API-Funktion "FlushFileBuffers". Da findeste auch einen Hinweis auf CreateFile mit FILE_FLAG_NO_BUFFERUNG flag.
Damit kannste sicherstellen, dass Deine Daten schnellstmöglich da ankommen, wo sie hinsollen.
Wenn's dann noch nicht klappt, hast Du ein anderes Problem.
Viele Grüße
Michael
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: Dateien sicher schreiben

Beitrag von ramses »

Hallo Jan
ich hatte vor Jahren die selben Probleme, besonders wenn grössere BitMaps enhalten waren, ich hatte dann deshalb auf L&L gewechselt und seitdem auch mit 28MPix Bilder keine Probleme mehr. Edgar's Klasse ist ja eigentlich nur ein Wrapper auf Quickpdf mit den dazugehörigen Sorgen.

Vielleicht würde dir ja derselbe Schrift (zu L&L) auch weiterhelfen. ..... Auf jeden Fall ist die Gestaltung eines DOC's viel viel einfacher und schneller und Tel. Support ist super und in Deutsch .....

Cu Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Dateien sicher schreiben

Beitrag von AUGE_OHR »

mikehoffmann hat geschrieben:Google mal nach der API-Funktion "FlushFileBuffers". Da findeste auch einen Hinweis auf CreateFile mit FILE_FLAG_NO_BUFFERUNG flag.
gute Idee !
du solltest noch ein Beispiel bringen wie man das macht den API ist nicht jedermanns Sache.
gruss by OHR
Jimmy
Antworten