Ausdrucken externer Dateien mit NAS

17. Februar 2022 12:49

Hallo,

mein Ziel ist es, durch einen NAS eine vorhandene PDF Datei auszudrucken.
Ich habe zum Drucken beliebiger Dateien mit Hilfe von DotNet einige Hinweise gefunden.
https://www.comporsys.de/dynamics-nav-b ... er-dateien
Mein Problem ist, dass es zwar unter einem RTC gut funktioniert, aber nicht unter einem NAS.

Zum Drucker auf Server (Abfrage über GUIALLOWED = FALSE) wird folgende Funktion verwendet. Für den Druck über den RTC sieht der Code quasi gleich aus.
PrintFileName verweist auf den Ort der PDF Datei. Den in der CU 1 durch FindPrinter gefundene Druckernamen hole ich mir über ein single instance Codeunit ab.
Code:
LOCAL PrintFileServer(PrintFileName : Text)
//DotNet Variablen auf RunOnClient = Nein
IF NOT FileMgt.ServerFileExists(PrintFileName) THEN BEGIN
  MESSAGE(STRSUBSTNO(Text000,PrintFileName));
  EXIT;
END;
 
//Holt den Druckernamen des gefundenen Druckers aus der CU1
ItemPrinterSelectionMgt.GetPrinterName(PrinterName);

StartInfo := StartInfo.ProcessStartInfo;
IF NOT Preview THEN BEGIN
  StartInfo.Verb := 'PrintTo';
  StartInfo.Arguments := '"' + PrinterName + '"';
END;
StartInfo.FileName := PrintFileName;
 
Process := Process.Process;
Process.StartInfo := StartInfo;

Process.Start;
IF NOT Process.WaitForExit(7000) THEN BEGIN
  Process.Kill;
END;

Die DotNet Variablen sind RunOnClient = No.
Code:
Name   DataType   Subtype   Length
Process   DotNet   System.Diagnostics.Process.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
StartInfo   DotNet   System.Diagnostics.ProcessStartInfo.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
PrinterSettings   DotNet   System.Drawing.Printing.PrinterSettings.'System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'   


Der Prozess zum Drucken läuft über einen NAV. Diesen Prozess konnte ich bereits debuggen. Ich konnte sehen, dass der korrekte Druckername geholt wurde (genau so, wie der Druckername auch auf dem NST-Server vorhanden ist).
Den übergebenen Dateinamen habe ich ebenfalls geprüft. Die PDF Datei liegt an dem angegeben Temp-Ordner auf dem Server.
Leider stürzt der Debugger bei der Zeile Process := Process.Process mit der Meldung "Schwerwiegender Debugger-Fehler" ab.
Auf dem Server ist Adobe Reader installiert. Auf dem Server habe ich bereits manuell eine PDS auf dem besagten Drucker erfolgreich ausgegeben.
Den Drucker habe ich auf dem Server angehalten, um zu sehen, ob etwas in der Druckerwarteschlage auftaucht. Was aber nicht der Fall ist.

Hat jemand schon mal ein ähnliches Szenario erfolgreich unter NAV 2016 abgebildet?
Funktioniert diese Art des Druckern vielleicht gar nicht unter einem NAS?

Gruß
Dirk

Re: Ausdrucken externer Dateien mit NAS

17. Februar 2022 14:59

vielleicht liegt es am RunOnClient

warum muss es über das NAS ausgeführt werden?
Reicht nicht einfach eine Windows-Aufgabenplanung?

Re: Ausdrucken externer Dateien mit NAS

17. Februar 2022 15:37

Hallo,

bevor Ihr weitersucht.

Wenn sich jemand auf dem Server auf dem Server per Remote Desktop anmeldet, und dort mit der rechten Maustaste auf eine PDF-Datei klickt, gibt es da die Option Drucken?

Falls nein, dann ist auch auf dem Rechner kein Programm installiert, das PDFs aus dem Kontextmenü und damit auch nicht per PrintTo drucken kann, oder der Standard PDF-Viewer kennt diese Option nicht.

Bei mir funktioniert die PDF Drucken- Option nur, wenn mit dem Dateityp '.pdf' auch der installierte Acrobat- Reader verknüpft ist. Diese Einstellung gilt, soviel ich weiß, pro Benutzer, also auch der Benutzer des NAS- Dienstes muss den Acrobat als seinen Standard- PDF-Viewer hinterlegt haben.

Besser scheint es mir den Acrobat Reader per Kommandozeile mit den richtigen Parametern aufzurufen (ist auch ein wenig tricky), Die Programmstruktur ist dem "PrinTo"- Beispiel ähnlich.

Gruß Fiddi

Re: Ausdrucken externer Dateien mit NAS

17. Februar 2022 17:51

Hallo,

vielen Dank für eure schnellen Antworten.

@sweikelt: In der Funktion PrintFileServer sind die DotNet Variablen alle auf RunOnClient = No eingestellt.
Das Ganze muss leider in einem NAS laufen, weil es Teil einer Schnittstelle zu einer Lagersoftware ist. Diese druckt dann in NAV Lieferscheine aus und soll dann auch ein Merkblatt (als PDF vorliegend) mit ausdrucken. Dazu habe in meinen Report mit in die Report Selection mit eingebunden.

@fiddi: Auf dem Server, auf dem der NST läuft, ist auch Adobe Reader installiert. Per Remote habe ich mich mit demselben User angemeldet, der auch für den NST verwendet wird. Dort konnte ich eine PDF mit Doppelklick öffnen (also ist beim Benutzer des NAS Dienstes die Endung PDF mit Acrobat verknüpft). Weiterhin kann ich auch mit Rechtsklick "Drucken" auswählen und die Ausgabe erfolgt an den Standard Drucker.
Wir haben den gewünschten Zieldrucker auch mal als Standarddrucker eingerichtet und StartInfo.Verb von 'PrintTo' auf 'Print' geändert. Aber auch das hatte keinen Erfolg.
Die Version, dass man den Acrobat Reader über Befehlszeile direkt aufruft (statt Windows über den Endung entscheiden zu lassen), wollte ich gerne vermeiden. Wir wollen evtl. auch noch mal andere Dateien drucken, z.B. JPGs. Außerdem muss ich ja dann wahrscheinlich auch den Pfad zum Programm angeben und der könnte auf verschiedenen Server ja unterschiedlich sein. Wie schon von dir gesagt: Tricky.

Gruß,
Dirk

Re: Ausdrucken externer Dateien mit NAS

18. Februar 2022 10:27

luninaut hat geschrieben:Wir wollen evtl. auch noch mal andere Dateien drucken, z.B. JPGs. Außerdem muss ich ja dann wahrscheinlich auch den Pfad zum Programm angeben und der könnte auf verschiedenen Server ja unterschiedlich sein. Wie schon von dir gesagt: Tricky.

das sollte aber kein Problem darstellen! -> Einrichtungstabelle dahinter mit Servername und Speicherort - dann entscheidest du zur Laufzeit, auf welchem Server du gerade bist und nimmst dir den Pfad.
Ggf. sogar noch bisl weiter denken und den Befehlssatz dahinter - für die verschiedenen Dateitypen und Programme :D

Re: Ausdrucken externer Dateien mit NAS

18. Februar 2022 11:01

Hallo,

sehe ich genau so. Es gibt nur für die wenigsten Datenformate die Drucken- Verknüpfung. Wenn du also weiter denken willst, dann solltest du dir wirklich alle Möglichkeiten offen halten, und mit der Programmzeile arbeiten.

Gruß fiddi

Re: Ausdrucken externer Dateien mit NAS

1. März 2022 10:31

Ich habe für mich die Lösungssuche erst einmal abgeschlossen.
Wie es sich gezeigt hat, haben wir keine Möglichkeit gefunden, eine PDF Datei im Hintergrund durch NAS oder Aufgabenwarteschlage auszudrucken. Der Prozess wurde zwar immer gestartet, hat aber keine Aktion ausgeführt. Wir haben als Standardprogramm für PDF sowohl Adobe Reader als auch Internet Explorer ausprobiert. Vielleicht ist es einfach eine Sache der fehlenden GUI.
Wir haben uns jetzt auch bewusst gegen den Ansatz entschieden, die Anwendung direkt aufzurufen und die zu druckende PDF Datei als Parameter mitzugeben. Da wir über 10 Server mit NAV laufen habe, wäre mir die Einrichtung etwas aufwendiger gewesen und außerdem wollte ich ja eine komplett flexible Lösung haben (unabhängig von der Dateiendung).

Wir haben als Alternative einen Weg gefunden, die Datei (in dem Fall nur eine Seite) als Bild auszudrucken. Wir haben die PDF in ein GIF gewandelt (mit GIMP). Dieses GIF wird standardmäßig auf dem Server mit MS Paint geöffnet. Damit klappt auch der Ausdruck im Hintergrund über NAS.

Sollte jemand doch noch eine Lösung für den Druck von PDF Dokumenten im Hintergrund finden, würde ich mich natürlich trotzdem über diese Info freuen.