| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für EPLAN |
| |
 | Eplan präsentiert in Hannover erste Einblicke in erweiterte Service-App , eine Pressemitteilung
|
Autor
|
Thema: C# pdf druck anstoßen (2520 / mal gelesen)
|
A.Robert Mitglied staatl. gepr. Techniker
 
 Beiträge: 479 Registriert: 09.03.2015 EPLAN Electric P8 - Select Version: 2.6 HF4 2.8 HF4 / SQL 2.9 SP1 Update 14 / ProPanel
|
erstellt am: 08. Sep. 2016 14:16 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, ich weiß das ist nicht unbedingt EPLAN P8 Thema. Kurze Vorgeschichte: Ich erzeuge zwei pdf´s aus einem script heraus (farbe und sw). Diese werden an einem bestimmten Ordner / Pfad abgelegt. Nun möchte ich für die "sw-Version" einen Druck anstoßen. Habe jetzt diverse Wege ausprobiert, bin aber zu keinem Ergebnis gekommen. 
PS: drucken aus dem Eplan kann ich nicht, da die pdf mit einem bestimmten Schema erstellt wird. Hoffe ihr könnt mir weiterhelfen ------------------ Gruß Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fency Mitglied Eplan Konstrukteur
 
 Beiträge: 208 Registriert: 15.07.2011
|
erstellt am: 08. Sep. 2016 15:52 <-- editieren / zitieren --> Unities abgeben:          Nur für A.Robert
|
A.Robert Mitglied staatl. gepr. Techniker
 
 Beiträge: 479 Registriert: 09.03.2015 EPLAN Electric P8 - Select Version: 2.6 HF4 2.8 HF4 / SQL 2.9 SP1 Update 14 / ProPanel
|
erstellt am: 08. Sep. 2016 16:26 <-- editieren / zitieren --> Unities abgeben:         
ja google liefert jede Menge Müll ... wenn du wüstest, wieviele Seiten ich heute schon durchgelesen habe  trotzdem DANKE  Code:
string pdffolder = @"HIER-VERZEICHNIS-EINTRAGEN"; //dieser Ordner wird gedruck PrintDialog pDialog = new PrintDialog(); if (pDialog.ShowDialog() == DialogResult.OK) { DirectoryInfo unzippedFolder = new DirectoryInfo(pdffolder); foreach (FileInfo file in unzippedFolder.GetFiles())//print each PDF-file within the unzipped folder { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = @"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"; Process process = new Process(); startInfo.Arguments = string.Format("/h /t \"{0}\" \"{1}\"", file.FullName, pDialog.PrinterSettings.PrinterName);//file.FullName: full path of PDF file //startInfo.CreateNoWindow = true; startInfo.ErrorDialog = false; startInfo.UseShellExecute = false; process = Process.Start(startInfo); if (!process.WaitForExit(7000)) { // kill Adobe Reader process.Kill(); } } }
Hab das von hier: http://www.mycsharp.de/wbb2/thread.php?threadid=116503&hilight=pdf+drucken Einziger Minus, das Fenster drucken geht mit auf und man muss es mit OK bestätigen. Kann man aber später noch anpassen.
------------------ Gruß Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
F.S. Moderator
    
 Beiträge: 1924 Registriert: 23.04.2003 EPLAN Electric P8 2025 Prof.
|
erstellt am: 08. Sep. 2016 16:46 <-- editieren / zitieren --> Unities abgeben:          Nur für A.Robert
Ich habe mal das Bastelprojekt für deinen PDF Export um einen PDF ausdruck erweitert. Ein kurzer Test zeigte das es funktioniert. Es ist der von fency genannte 1. Link. Code:
using System.Diagnostics; using System.IO;public class Script { [Start] public void Test() { string strZielDatei; strZielDatei = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\Test1.pdf"; PDFexportSeite(strZielDatei); PrintPDFFile(strZielDatei); return; } public void PDFexport(string strZielDatei) { //Export durchführen ActionCallingContext pdfContext = new ActionCallingContext(); pdfContext.AddParameter("type", "PDFPROJECTSCHEME"); //PDFPROJECTSCHEME = Projekt im PDF-Format exportieren pdfContext.AddParameter("exportscheme", "Test 1"); //verwendetes Schema pdfContext.AddParameter("exportfile", strZielDatei); //Name export.Projekt, Vorgabewert: Projektname pdfContext.AddParameter("exportmodel", "0"); //0 = keine Modelle ausgeben CommandLineInterpreter cmdLineItp = new CommandLineInterpreter(); cmdLineItp.Execute("export", pdfContext); return; } public void PDFexportSeite(string strZielDatei) { CommandLineInterpreter oCLI1 = new CommandLineInterpreter(); ActionCallingContext pdfContext = new ActionCallingContext(); pdfContext.AddParameter("EXPORTSCHEME", "Test 1"); pdfContext.AddParameter("PAGEFILTER", "FILTER_Name"); pdfContext.AddParameter("USEPAGEFILTER", "1"); pdfContext.AddParameter("TYPE", "PDFPAGESSCHEME"); pdfContext.AddParameter("EXPORTFILE", strZielDatei); oCLI1.Execute("export", pdfContext); return; } /// <summary> /// Druckt ein PDF Dokument /// </summary> /// <param name="strZielDatei">Pfad zum Dokument</param> public static void PrintPDFFile(string strZielDatei) { FileInfo fileInfo = new FileInfo(strZielDatei); if (!fileInfo.Exists) { throw new FileNotFoundException(); } int id = 0; try { using (Process proc = new Process()) { proc.StartInfo.Verb = "print"; proc.StartInfo.FileName = strZielDatei; proc.StartInfo.CreateNoWindow = true; proc.StartInfo.UseShellExecute = true; proc.StartInfo.ErrorDialog = true; proc.Start(); id = proc.Id; proc.WaitForExit(10000); } } catch { //IGNORE } finally { killProcessById(id); } return; } /// <summary> /// Beendet einen Prozess an Hand seiner Id /// </summary> /// <param name="id">ProcessId</param> private static void killProcessById(int id) { foreach (Process p in Process.GetProcesses()) { if (p.Id == id) { p.Kill(); break; } } } }
------------------ grüße FrankS [Diese Nachricht wurde von F.S. am 08. Sep. 2016 editiert.] [Diese Nachricht wurde von F.S. am 08. Sep. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A.Robert Mitglied staatl. gepr. Techniker
 
 Beiträge: 479 Registriert: 09.03.2015 EPLAN Electric P8 - Select Version: 2.6 HF4 2.8 HF4 / SQL 2.9 SP1 Update 14 / ProPanel
|
erstellt am: 08. Sep. 2016 16:58 <-- editieren / zitieren --> Unities abgeben:         
 bin etwas eingeschüchtert. So schnell geht das also, wenn man Ahnung hat  werde das mal testen. DANKE Habe gerade auch noch den obigen ersten Code von mir angepasst, um Datei nach dem Druckauftrag zu löschen.
Code:
//dieser Ordner wird gedruckt (Achtung alle Dateien, drin sind!!!) string pdffolder = @"HIER-VERZEICHNIS-EINTRAGEN"; //Pfad + Dateiname + Endung (.pdf) erstellen, für Delete Anweisung string pdffile = pdffolder + PressureBK + tbDateiname.Text; string pdfEND = ".pdf"; string pdffileprint = pdffile + pdfEND; PrintDialog pDialog = new PrintDialog(); if (pDialog.ShowDialog() == DialogResult.OK) { DirectoryInfo unzippedFolder = new DirectoryInfo(pdffolder); foreach (FileInfo file in unzippedFolder.GetFiles()) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = @"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"; Process process = new Process(); startInfo.Arguments = string.Format("/h /t \"{0}\" \"{1}\"", file.FullName, pDialog.PrinterSettings.PrinterName); startInfo.ErrorDialog = false; startInfo.UseShellExecute = false; process = Process.Start(startInfo);
// kill Adobe Reader + kill File if (!process.WaitForExit(7000)) { process.Kill(); File.Delete(pdffileprint); } } }
------------------ Gruß Robert [Diese Nachricht wurde von A.Robert am 09. Sep. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A.Robert Mitglied staatl. gepr. Techniker
 
 Beiträge: 479 Registriert: 09.03.2015 EPLAN Electric P8 - Select Version: 2.6 HF4 2.8 HF4 / SQL 2.9 SP1 Update 14 / ProPanel
|
erstellt am: 09. Sep. 2016 09:03 <-- editieren / zitieren --> Unities abgeben:         
|
F.S. Moderator
    
 Beiträge: 1924 Registriert: 23.04.2003 EPLAN Electric P8 2025 Prof.
|
erstellt am: 09. Sep. 2016 09:26 <-- editieren / zitieren --> Unities abgeben:          Nur für A.Robert
|
A.Robert Mitglied staatl. gepr. Techniker
 
 Beiträge: 479 Registriert: 09.03.2015 EPLAN Electric P8 - Select Version: 2.6 HF4 2.8 HF4 / SQL 2.9 SP1 Update 14 / ProPanel
|
erstellt am: 09. Sep. 2016 12:35 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von F.S.: nö, geht hier mit den 2 usings direkt am Anfang.
Bei mir hat er ohne using System; das Environment angemeckert .. Naja ist ja egal  Ein schönes WE an alle  ------------------ Gruß Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A.Robert Mitglied staatl. gepr. Techniker
 
 Beiträge: 479 Registriert: 09.03.2015 EPLAN Electric P8 - Select Version: 2.6 HF4 2.8 HF4 / SQL 2.9 SP1 Update 14 / ProPanel
|
erstellt am: 12. Sep. 2016 10:29 <-- editieren / zitieren --> Unities abgeben:         
Moin, habe deine Variante jetzt bei mir eingebaut. Habe nur ein kleines Problem ... Bei großen pdf-Dokumenten reicht die Zeit nicht aus (habe diese hoch gesetzt), hat aber jetzt bei kleinen Dokumenten einen unschönen Nebeneffekt (Adobe viel zu lange auf). Kann man das vielleicht anders abfangen? Mach mich auch gleichg auf die Suche google  Gemeint ist die Zeile hier: proc.WaitForExit(10000);
------------------ Gruß Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| Dipl.-Ing./M./BA/Techniker Elektro-Konstrukteur (m/w/d) | Die Hinterkopf GmbH ist ein inhabergeführtes, mittelständisches Unternehmen in zweiter Generation mit Sitz in Eislingen/Fils bei Göppingen (BaWü), das 1962 gegründet wurde. Das Familienunternehmen hat es bei der Entwicklung und Herstellung von großen Maschinen und Produktionslinien zur Herstellung und Dekoration zylindrischer Hohlkörper zur Weltmarkt- und Technologieführerschaft geschafft.... | Anzeige ansehen | Feste Anstellung |
|
A.Robert Mitglied staatl. gepr. Techniker
 
 Beiträge: 479 Registriert: 09.03.2015 EPLAN Electric P8 - Select Version: 2.6 HF4 2.8 HF4 / SQL 2.9 SP1 Update 14 / ProPanel
|
erstellt am: 06. Mrz. 2017 09:49 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, wollte das Script um Anzahl der Ausdrucke erweitern. Dazu stoße ich den pro.Start() durch eine For-Schleife mehrmals an. Der Ausdruck läuft sauber ab, nur das beenden des Prozesses und das löschen der Datei funktioniert sporadisch. Kann mir hier jemand mit mehr Ahnung vom scripting helfen Danke schon mal hier der Code von der Testdatei, die ich erstellt habe (ist auch im Anhang):
Code:
using Eplan.EplApi.Scripting; using System.Diagnostics; using System.IO; using System;public class PDF_druck_Anzahl { public string strZielDatei = ""; [Start] public void Function() { int anzahl = 3; int durchlauf = 1; int zeit; zeit = 7000 * durchlauf; strZielDatei = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\Test1.pdf"; int id = 0; FileInfo fileInfo = new FileInfo(strZielDatei); if (!fileInfo.Exists) { throw new FileNotFoundException(); } else { using (Process proc = new Process()) { proc.StartInfo.Verb = "print"; proc.StartInfo.FileName = strZielDatei; proc.StartInfo.CreateNoWindow = true; proc.StartInfo.UseShellExecute = true; proc.StartInfo.ErrorDialog = true; for (durchlauf = 1; durchlauf <= anzahl; durchlauf++) { proc.Start(); } proc.WaitForExit(zeit); id = proc.Id; if (!proc.WaitForExit(zeit)) { killProcessById(id); } } } } private void killProcessById(int id) { foreach (Process p in Process.GetProcesses()) { if (p.Id == id) { p.Kill(); File.Delete(strZielDatei); } } } }
------------------ Gruß Robert Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |