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?
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
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.htmlhttps://stackoverflow.com/questions/18378271/dynamics-nav-rtc-command-line-parameter-passing
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?
11. Juni 2019 14:45
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
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.
Das funktioniert, hat jedoch den Nachteil, das der Drucker nicht definiert werden kann.
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?
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
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/
11. Juni 2019 15:29
Schau mal nach PdfiumViewer:
https://github.com/pvginkel/PdfiumViewer /
https://github.com/pvginkel/PdfiumBuildDamit 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'
11. Juni 2019 15:36
Danke für die vielen Tips, werde mich da mal durcharbeiten und sehen, was am besten passt
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
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.