Dateien sicher schreiben

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Dateien sicher schreiben

Beitragvon Jan » Di, 29. Nov 2016 9:32

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11509
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: Dateien sicher schreiben

Beitragvon Bertram Hansen » Di, 29. Nov 2016 9:35

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

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Benutzeravatar
Bertram Hansen
1000 working lines a day
1000 working lines a day
 
Beiträge: 608
Registriert: Di, 27. Sep 2005 7:55
Wohnort: 53902 Bad Münstereifel

Re: Dateien sicher schreiben

Beitragvon Martin Altmann » Di, 29. Nov 2016 9:47

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: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
 
Beiträge: 12738
Registriert: Fr, 23. Sep 2005 3:58
Wohnort: Berlin

Re: Dateien sicher schreiben

Beitragvon Jan » Di, 29. Nov 2016 10:07

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11509
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: Dateien sicher schreiben

Beitragvon Martin Altmann » Di, 29. Nov 2016 10:10

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: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
 
Beiträge: 12738
Registriert: Fr, 23. Sep 2005 3:58
Wohnort: Berlin

Re: Dateien sicher schreiben

Beitragvon Jan » Di, 29. Nov 2016 10:10

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11509
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: Dateien sicher schreiben

Beitragvon Jan » Di, 29. Nov 2016 10:12

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11509
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: Dateien sicher schreiben

Beitragvon Martin Altmann » Di, 29. Nov 2016 10:28

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: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
 
Beiträge: 12738
Registriert: Fr, 23. Sep 2005 3:58
Wohnort: Berlin

Re: Dateien sicher schreiben

Beitragvon Jan » Di, 29. Nov 2016 10:44

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11509
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: Dateien sicher schreiben

Beitragvon Martin Altmann » Di, 29. Nov 2016 11:16

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: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
 
Beiträge: 12738
Registriert: Fr, 23. Sep 2005 3:58
Wohnort: Berlin

Re: Dateien sicher schreiben

Beitragvon Jan » Di, 29. Nov 2016 11:30

:?:
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11509
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: Dateien sicher schreiben

Beitragvon Martin Altmann » Di, 29. Nov 2016 11:34

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: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
 
Beiträge: 12738
Registriert: Fr, 23. Sep 2005 3:58
Wohnort: Berlin

Re: Dateien sicher schreiben

Beitragvon Jan » Di, 29. Nov 2016 11:55

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11509
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: Dateien sicher schreiben

Beitragvon Martin Altmann » Di, 29. Nov 2016 12:57

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: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
 
Beiträge: 12738
Registriert: Fr, 23. Sep 2005 3:58
Wohnort: Berlin

Re: Dateien sicher schreiben

Beitragvon Jan » Di, 29. Nov 2016 13:04

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11509
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: Dateien sicher schreiben

Beitragvon Koverhage » Di, 29. Nov 2016 16:38

Jan,
wie wäre es mit local speichern. drucken und auf server kopieren und local löschen ?
Gruß
Klaus
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1884
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen

Re: Dateien sicher schreiben

Beitragvon Jan » Di, 29. Nov 2016 16:52

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11509
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: Dateien sicher schreiben

Beitragvon Werner_Bayern » Di, 29. Nov 2016 16:57

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 euch

Werner
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
 
Beiträge: 1209
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Dateien sicher schreiben

Beitragvon Jan » Di, 29. Nov 2016 17:05

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11509
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: Dateien sicher schreiben

Beitragvon Werner_Bayern » Di, 29. Nov 2016 17:51

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 euch

Werner
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
 
Beiträge: 1209
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Dateien sicher schreiben

Beitragvon AUGE_OHR » Di, 29. Nov 2016 18:11

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
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10146
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Dateien sicher schreiben

Beitragvon brandelh » Di, 29. Nov 2016 20:23

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
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Dateien sicher schreiben

Beitragvon mikehoffmann » Sa, 28. Jan 2017 13:36

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
Benutzeravatar
mikehoffmann
Rookie
Rookie
 
Beiträge: 16
Registriert: Mo, 21. Sep 2015 15:22

Re: Dateien sicher schreiben

Beitragvon ramses » Sa, 28. Jan 2017 19:08

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
ramses
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 390
Registriert: Mi, 28. Jul 2010 16:16

Re: Dateien sicher schreiben

Beitragvon AUGE_OHR » Sa, 28. Jan 2017 20:17

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10146
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Nächste

Zurück zu Allgemeine Fragen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast