Vorhandene PDF's aus NAV drucken

11. Juni 2019 14:19

Hallo zusammen

Ich bin auf der Suche nach einer Lösung, mit welcher sich vorhandene PDF's direkt aus NAV drucken lassen. Die Datein liegen in einem eigenen Verzeichnis auf dem Server. Hintergrund ist, dass in NAV zwar Rechnungen entstehen, diese aber aus einem 3.System stammen, welches auch die fertigen PDF's liefert, die gedruckt werden müssen. Der Druck soll schnell und im Hintergrund erfolgen, also ohne User-Interaktion.

Hat vielleicht jemand Erfahrung damit und kann mir einen Tipp dazu geben?

Re: Vorhandene PDF's aus NAV drucken

11. Juni 2019 14:30

Hallo,

es gibt die Möglichkeit dem Acrobat Reader per Kommandozeilenparameter zu sagen, dass er eine PDF drucken soll.

Das macht aber nur Spaß, wenn der Drucker auf dem gedruckt werden soll fix ist. Ansonsten musst du den Reader jedes mal manuell schließen, damit NAV weiter arbeitet, oder du hast irgendwann zig Reader offen.

Gruß Fiddi

Re: Vorhandene PDF's aus NAV drucken

11. Juni 2019 14:40

Ich empfehle Foxit-Reader oder Sumatra PDF. Mit denen ist es möglich per Kommandozeile zu drucken.

Dann brauchst du ein - zwei Funktionen, welche dir die PDFs auf den Drucker schmeißen. Per .NET mit ProcessStart.

http://www.navisionworld.com/2017/09/how-to-print-remote-file-from-nav.html
https://stackoverflow.com/questions/18378271/dynamics-nav-rtc-command-line-parameter-passing

Re: Vorhandene PDF's aus NAV drucken

11. Juni 2019 14:41

Danke Fiddi, das scheint mir aber nicht gerade praktikabel zu sein, bei einigend tausend Dateien pro Tag.

Der Drucker ist sicher sehr schnell, aber sonst?

Re: Vorhandene PDF's aus NAV drucken

11. Juni 2019 14:45

:greenarrow: https://forum.mibuso.com/discussion/com ... ent_142121

Code:
PrintFile(PrintThisFile : Text[250])
 IF ISCLEAR(objShell) THEN
 CREATE
(objShell);

 SplitDirFile(PrintThisFile,Dir,FileName);

 objFolder := objShell.NameSpace(Dir);
 objFolderItems := objFolder.Items;
 objFolderItem := objFolderItems.Item(FileName);
 objFolderItem.InvokeVerb('PRINT');
 objVerbs := objFolderItem.Verbs;

 Used variables:
 Name DataType Subtype Length
 objShell Automation 
'Microsoft Shell Controls And Automation'.Shell
 objFolder Automation 
'Microsoft Shell Controls And Automation'.Folder
 objFolderItems Automation 
'Microsoft Shell Controls And Automation'.FolderItems
 objFolderItem Automation 
'Microsoft Shell Controls And Automation'.FolderItem
 objVerbs Automation 
'Microsoft Shell Controls And Automation'.FolderItemVerbs
 Dir Text 250
 FileName Text 250

Re: Vorhandene PDF's aus NAV drucken

11. Juni 2019 14:48

rotsch hat geschrieben:Danke Fiddi, das scheint mir aber nicht gerade praktikabel zu sein, bei einigend tausend Dateien pro Tag.

Also zumindest mit dem Foxit habe ich da ca 800 PDfs pro Tag gedruckt. Ohne Probleme.

Timo Lässer hat geschrieben::greenarrow: https://forum.mibuso.com/discussion/com ... ent_142121

Das funktioniert, hat jedoch den Nachteil, das der Drucker nicht definiert werden kann.

Re: Vorhandene PDF's aus NAV drucken

11. Juni 2019 14:53

Ist 'Microsoft Shell Controls And Automation' schnell genug? Und irgendwie habe ich in Erinnerung, dass 'Shell' veraltet ist. Oder irre ich mich da?

Re: Vorhandene PDF's aus NAV drucken

11. Juni 2019 15:01

Und irgendwie habe ich in Erinnerung, dass 'Shell' veraltet ist. Oder irre ich mich da?


So ist es.
Evtl findest du ja auch einen Drucker, der PDF direkt verarbeiten kann (Kyocera soll so etwas können). Ansonsten gibt es keinen - mir bekannten - Weg, als das über die Kommandozeile zu machen

Gruß Fiddi

Re: Vorhandene PDF's aus NAV drucken

11. Juni 2019 15:11

rotsch hat geschrieben:Ist 'Microsoft Shell Controls And Automation' schnell genug? Und irgendwie habe ich in Erinnerung, dass 'Shell' veraltet ist. Oder irre ich mich da?

Ja. Jedoch kannst du auch Dotnet verwenden. Siehe meine Links oben.

https://demiliani.com/2018/07/11/dynamics-365-business-central-on-premise-extension-for-printing-external-documents/

Re: Vorhandene PDF's aus NAV drucken

11. Juni 2019 15:29

Schau mal nach PdfiumViewer: https://github.com/pvginkel/PdfiumViewer / https://github.com/pvginkel/PdfiumBuild
Damit könntest du so eine Funktion bauen:

Code:
PrintPdfDocumentOnClient(FullPath : Text;Printername : Text) : Boolean
printerSettings := printerSettings.PrinterSettings();
IF Printername <> '' THEN
  printerSettings.PrinterName := Printername;

IF NOT printerSettings.IsValid THEN
  ERROR('Druckeinstellungen sind ungültig.');

pdfium_Document := pdfium_Document.Load(FullPath);
printDocument := pdfium_Document.CreatePrintDocument();
WITH printDocument DO BEGIN
  PrinterSettings := printerSettings;
  DocumentName(FileManagement.GetFileName(FullPath));
  Print();
END;

EXIT(TRUE);


Code:
Name   DataType   Subtype   Length
FileManagement   Codeunit   File Management   
printerSettings   DotNet   System.Drawing.Printing.PrinterSettings.'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'   
printDocument   DotNet   System.Drawing.Printing.PrintDocument.'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'   
pdfium_Document   DotNet   PdfiumViewer.PdfDocument.'PdfiumViewer, Version=2.13.0.0, Culture=neutral, PublicKeyToken=91e4789cfb0609e0'   

Re: Vorhandene PDF's aus NAV drucken

11. Juni 2019 15:36

Danke für die vielen Tips, werde mich da mal durcharbeiten und sehen, was am besten passt

Re: Vorhandene PDF's aus NAV drucken

17. Juni 2019 10:28

Versuche es mal bspw. mit diesen .NET-Komponenten. Damit kannst du die PDF Dokumente direkt in deiner Anwendung öffnen und drucken, ist vermutlich stabiler als über Commandline. Nutze das teilweise auch um PDF Dokumente in PNG zu konvertieren, so lassen sich externe PDF Daten in vorhandene RDLC Reports einbetten:

http://www.o2sol.com/products.htm