Frank Schöneck hat schon viele Scripte der EPLAN-Community bereitgestellt. Nun hat er ein schönes GUI-Script erstellt um den automatischen PDF-Export noch besser zu automatisieren.
Vielen Dank für die tolle Umsetzung!
PdfExportAssistent (4412 Downloads )
//Menüpunkt anlegen
[DeclareMenu()]
public void PDFAssistent_Menu()
{
//Menüeintrag
Eplan.EplApi.Gui.Menu oMenu = new Eplan.EplApi.Gui.Menu();
oMenu.AddMenuItem("PDF (Assistent)...", "PDFAssistent_Start", "PDF Assistent, aktuelles Projekt als PDF-Datei exportieren", 35287, 1, false, false);
}
//Event ProjectClose abfangen
[DeclareEventHandler("onActionStart.String.XPrjActionProjectClose")]
public void Project_Close_Event()
{
//Einstellung einlesen
Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings();
if (oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.ByProjectClose"))
{
bool bChecked = oSettings.GetBoolSetting("USER.SCRIPTS.PDF_Assistent.ByProjectClose", 1);
if (bChecked) //Bei ProjectClose ausführen
{
PDFAssistent_SollStarten();
}
}
return;
}
//Event Eplan End abfangen
[DeclareEventHandler("Eplan.EplApi.OnMainEnd")]
public void Eplan_End_Event()
{
//Einstellung einlesen
Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings();
if (oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.ByEplanEnd"))
{
bool bChecked = oSettings.GetBoolSetting("USER.SCRIPTS.PDF_Assistent.ByEplanEnd", 1);
if (bChecked) //Bei EplanEnd ausführen
{
PDFAssistent_SollStarten();
}
}
return;
}
//Prüfen ob Assistent gestartet werden soll
public void PDFAssistent_SollStarten()
{
Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings();
//Ist Projekt in Projekt-Ordner
//Wenn angekreuzt dann muß Projekt im Ordner sein für Assistent, sonst kein Assistent
//Wenn nicht angekreuzt dann Assistent
if (oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.OhneNachfrage"))
{
bool bChecked = oSettings.GetBoolSetting("USER.SCRIPTS.PDF_Assistent.ProjectInOrdner", 1);
string sProjektInOrdner = oSettings.GetStringSetting("USER.SCRIPTS.PDF_Assistent.ProjectInOrdnerName", 0);
if (bChecked)
{
string sProjektOrdner = PathMap.SubstitutePath("$(PROJECTPATH)");
sProjektOrdner = sProjektOrdner.Substring(0, sProjektOrdner.LastIndexOf(@"\"));
if (!sProjektOrdner.EndsWith(@"\"))
{
sProjektOrdner += @"\";
}
if (sProjektInOrdner == sProjektOrdner) //hier vielleicht noch erweitern auf alle Unterordner (InString?)
{
PDFAssistent_ausführen();
}
else
{
Close();
}
}
else
{
PDFAssistent_ausführen();
}
}
}
//Assistent ohne Dialog direkt ausführen (Ohne Nachfrage ausführen)
public void PDFAssistent_ausführen()
{
Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings();
if (oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.OhneNachfrage"))
{
bool bChecked = oSettings.GetBoolSetting("USER.SCRIPTS.PDF_Assistent.OhneNachfrage", 1);
if (bChecked)
{
cboAusgabeNach.SelectedIndex = 0;
ReadSettings();
PDFexport(txtSpeicherort.Text + txtDateiname.Text + @".pdf");
Close();
}
else
{
PDFAssistent_Start();
}
}
}
//Assistent Form starten
[DeclareAction("PDFAssistent_Start")]
public void PDFAssistent_Start()
{
frmPDFAssistent frm = new frmPDFAssistent();
frm.ShowDialog();
return;
}
//Form wird geladen
private void frmPDFAssistent_Load(object sender, EventArgs e)
{
//Ausgabe Nach einstellen
cboAusgabeNach.SelectedIndex = 0;
chkIstInProjektOrdner.CheckState = CheckState.Unchecked;
txtProjektGespeichertInOrdner.Enabled = false;
btnProjektOrdnerAuswahl.Enabled = false;
ReadSettings();
}
//Button: Abbrechen
private void btnAbbrechen_Click(object sender, System.EventArgs e)
{
Close();
}
//Button: OK
private void btnOK_Click(object sender, System.EventArgs e)
{
if (txtDateiname.Text != string.Empty)
{
PDFexport(txtSpeicherort.Text + txtDateiname.Text + @".pdf");
}
WriteSettings();
Close();
}
//Ausgabe Nach hat sich geändert
private void cboAusgabeNach_SelectedIndexChanged(object sender, EventArgs e)
{
#if !DEBUG
string sProjektOrdner = PathMap.SubstitutePath("$(PROJECTPATH)");
string sDateiName = PathMap.SubstitutePath("$(PROJECTNAME)");
#else
string sProjektOrdner = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
string sDateiName = "TEST";
#endif
string sAusgabeOrdner = sProjektOrdner;
switch (cboAusgabeNach.SelectedIndex)
{
case 0: //in den Projekt-Ordner
sAusgabeOrdner = sProjektOrdner;
break;
case 1: //Ausgabeverzeichnis aus Einstellungen: PDF-Export
#if !DEBUG
Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings();
string sLastSchema = string.Empty;
if (oSettings.ExistSetting("USER.PDFExportGUI.SCHEMAS.LastUsed"))
{
sLastSchema = oSettings.GetStringSetting("USER.PDFExportGUI.SCHEMAS.LastUsed", 0);
}
if (oSettings.ExistSetting("USER.PDFExportGUI.SCHEMAS.Steinert.Data.TargetPath"))
{
sAusgabeOrdner = oSettings.GetStringSetting("USER.PDFExportGUI.SCHEMAS." + sLastSchema + ".Data.TargetPath", 0);
}
#endif
break;
case 2: //in den Ordner eine Ebene über dem Projekt-Ordner
sAusgabeOrdner = sProjektOrdner.Substring(0, sProjektOrdner.LastIndexOf(@"\"));
break;
case 3: //in Ordner "Eigene Dateien"
sAusgabeOrdner = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
break;
case 4: //auf den Desktop
sAusgabeOrdner = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
break;
case 5: //gleicher Pfad wie Projekt nur auf anderes Laufwerk
sAusgabeOrdner = sProjektOrdner.Substring(0, sProjektOrdner.LastIndexOf(@"\")); //in den Ordner eine Ebene über dem Projekt-Ordner
sAusgabeOrdner = sAusgabeOrdner.Replace("C:", "D:"); //Hier anpassen, welche Laufwerksbuchstaben verwendet werden.
break;
default:
MessageBox.Show("Auswahl:default");
break;
}
//Datumsstempel hinzufügen
if (chkDatumStempel.Checked)
{
sDateiName += "_" + DateTime.Now.ToString("yyyyMMdd");
}
//Zeitstempel hinzufügen
if (chkZeitStempel.Checked)
{
sDateiName += "-" + DateTime.Now.ToString("HHmmss"); ;
}
//Endet mit \ ?
if (!sAusgabeOrdner.EndsWith(@"\"))
{
sAusgabeOrdner += @"\";
}
txtDateiname.Text = sDateiName;
txtSpeicherort.Text = sAusgabeOrdner;
}
//Datumstempel zustand hat sich geändert
private void chkDatumStempel_CheckedChanged(object sender, EventArgs e)
{
cboAusgabeNach_SelectedIndexChanged(sender, e);
}
//Zeitstempel zustand hat sich geändert
private void chkZeitStempel_CheckedChanged(object sender, EventArgs e)
{
cboAusgabeNach_SelectedIndexChanged(sender, e);
}
//Gesamtes Projekt als PDF ausgeben
public void PDFexport(string sZielDatei)
{
//Progressbar ein
Eplan.EplApi.Base.Progress oProgress = new Eplan.EplApi.Base.Progress("SimpleProgress");
oProgress.ShowImmediately();
ActionCallingContext pdfContext = new ActionCallingContext();
pdfContext.AddParameter("type", "PDFPROJECTSCHEME"); //PDFPROJECTSCHEME = Projekt im PDF-Format exportieren
//pdfContext.AddParameter("exportscheme", "NAME_SCHEMA"); //verwendetes Schema
pdfContext.AddParameter("exportfile", sZielDatei); //Name export.Projekt, Vorgabewert: Projektname
pdfContext.AddParameter("exportmodel", "0"); //0 = keine Modelle ausgeben
pdfContext.AddParameter("blackwhite", "1"); //1 = PDF wird schwarz-weiss
pdfContext.AddParameter("useprintmargins", "1"); //1 = Druckränder verwenden
pdfContext.AddParameter("readonlyexport", "2"); //1 = PDF wird schreibgeschützt
pdfContext.AddParameter("usesimplelink", "1"); //1 = einfache Sprungfunktion
pdfContext.AddParameter("usezoomlevel", "1"); //Springen in Navigationsseiten
pdfContext.AddParameter("fastwebview", "1"); //1 = schnelle Web-Anzeige
pdfContext.AddParameter("zoomlevel", "1"); //wenn USEZOOMLEVEL auf 1 dann hier Zoomstufe in mm
CommandLineInterpreter cmdLineItp = new CommandLineInterpreter();
cmdLineItp.Execute("export", pdfContext);
//'Progressbar aus
oProgress.EndPart(true);
return;
}
//Einstellungen speichern
public void WriteSettings()
{
Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings();
//Einstellungen speichern
if (!oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.SaveSettings"))
{
oSettings.AddBoolSetting("USER.SCRIPTS.PDF_Assistent.SaveSettings",
new bool[] { false },
"SaveSettings Info",
new bool[] { false },
ISettings.CreationFlag.Insert);
}
oSettings.SetBoolSetting("USER.SCRIPTS.PDF_Assistent.SaveSettings", chkEinstellungSpeichern.Checked, 1); //1 = Visible = True
//Nur Speichern wenn erwünscht
if (chkEinstellungSpeichern.Checked)
{
//PDF bei Projekt schließen
if (!oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.ByProjectClose"))
{
oSettings.AddBoolSetting("USER.SCRIPTS.PDF_Assistent.ByProjectClose",
new bool[] { false },
"Datumsstempel speichern",
new bool[] { false },
ISettings.CreationFlag.Insert);
}
oSettings.SetBoolSetting("USER.SCRIPTS.PDF_Assistent.ByProjectClose", chkByProjectClose.Checked, 1); //1 = Visible = True
//PDF bei Eplan beenden
if (!oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.ByEplanEnd"))
{
oSettings.AddBoolSetting("USER.SCRIPTS.PDF_Assistent.ByEplanEnd",
new bool[] { false },
"Datumsstempel speichern",
new bool[] { false },
ISettings.CreationFlag.Insert);
}
oSettings.SetBoolSetting("USER.SCRIPTS.PDF_Assistent.ByEplanEnd", chkByEplanEnd.Checked, 1); //1 = Visible = True
//Ausgabe Nach
if (!oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.AusgabeNach"))
{
oSettings.AddNumericSetting("USER.SCRIPTS.PDF_Assistent.AusgabeNach",
new int[] { 0 },
new Range[] { new Range { FromValue = 0, ToValue = 32768 } },
"Default value of test setting",
new int[] { 0 },
ISettings.CreationFlag.Insert);
}
oSettings.SetNumericSetting("USER.SCRIPTS.PDF_Assistent.AusgabeNach", cboAusgabeNach.SelectedIndex, 1); //1 = Visible = True
oSettings.SetBoolSetting("USER.SCRIPTS.PDF_Assistent.ByEplanEnd", chkByEplanEnd.Checked, 1); //1 = Visible = True
//Ausführen ohne Nachfrage
if (!oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.OhneNachfrage"))
{
oSettings.AddBoolSetting("USER.SCRIPTS.PDF_Assistent.OhneNachfrage",
new bool[] { false },
"Datumsstempel speichern",
new bool[] { false },
ISettings.CreationFlag.Insert);
}
oSettings.SetBoolSetting("USER.SCRIPTS.PDF_Assistent.OhneNachfrage", chkOhneNachfrage.Checked, 1); //1 = Visible = True
//Datumsstempel
if (!oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.DateStamp"))
{
oSettings.AddBoolSetting("USER.SCRIPTS.PDF_Assistent.DateStamp",
new bool[] { false },
"Datumsstempel speichern",
new bool[] { false },
ISettings.CreationFlag.Insert);
}
oSettings.SetBoolSetting("USER.SCRIPTS.PDF_Assistent.DateStamp", chkDatumStempel.Checked, 1); //1 = Visible = True
//Zeitstempel
if (!oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.TimeStamp"))
{
oSettings.AddBoolSetting("USER.SCRIPTS.PDF_Assistent.TimeStamp",
new bool[] { false },
"Zeitstempel speichern",
new bool[] { false },
ISettings.CreationFlag.Insert);
}
oSettings.SetBoolSetting("USER.SCRIPTS.PDF_Assistent.TimeStamp", chkZeitStempel.Checked, 1); //1 = Visible = True
//Projekt in Ordner
if (!oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.ProjectInOrdner"))
{
oSettings.AddBoolSetting("USER.SCRIPTS.PDF_Assistent.ProjectInOrdner",
new bool[] { false },
"Projejt in Ordner speichern",
new bool[] { false },
ISettings.CreationFlag.Insert);
}
oSettings.SetBoolSetting("USER.SCRIPTS.PDF_Assistent.ProjectInOrdner", chkIstInProjektOrdner.Checked, 1); //1 = Visible = True
if (!oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.ProjectInOrdnerName"))
{
oSettings.AddStringSetting("USER.SCRIPTS.PDF_Assistent.ProjectInOrdnerName",
new string[] { },
new string[] { }, "test setting",
new string[] { "Default value of test setting" },
ISettings.CreationFlag.Insert);
}
oSettings.SetStringSetting("USER.SCRIPTS.PDF_Assistent.ProjectInOrdnerName", txtProjektGespeichertInOrdner.Text, 0);
}
}
//Einstellungen einlesen
public void ReadSettings()
{
Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings();
//ByProjectClose
if (oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.ByProjectClose"))
{
chkByProjectClose.Checked = oSettings.GetBoolSetting("USER.SCRIPTS.PDF_Assistent.ByProjectClose", 1);
}
//ByEplanEnd
if (oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.ByEplanEnd"))
{
chkByEplanEnd.Checked = oSettings.GetBoolSetting("USER.SCRIPTS.PDF_Assistent.ByEplanEnd", 1);
}
//Ausführen ohne Nachfrage
if (oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.OhneNachfrage"))
{
chkOhneNachfrage.Checked = oSettings.GetBoolSetting("USER.SCRIPTS.PDF_Assistent.OhneNachfrage", 1);
}
//Einstellungen speichern
if (oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.SaveSettings"))
{
chkEinstellungSpeichern.Checked = oSettings.GetBoolSetting("USER.SCRIPTS.PDF_Assistent.SaveSettings", 1);
}
//Datumsstempel
if (oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.DateStamp"))
{
chkDatumStempel.Checked = oSettings.GetBoolSetting("USER.SCRIPTS.PDF_Assistent.DateStamp", 1);
}
//Zeitstempel
if (oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.TimeStamp"))
{
chkZeitStempel.Checked = oSettings.GetBoolSetting("USER.SCRIPTS.PDF_Assistent.TimeStamp", 1);
}
//Ausgabe Nach
if (oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.AusgabeNach"))
{
cboAusgabeNach.SelectedIndex = oSettings.GetNumericSetting("USER.SCRIPTS.PDF_Assistent.AusgabeNach", 1);
}
//Projekt in Ordner
if (oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.ProjectInOrdner"))
{
chkIstInProjektOrdner.Checked = oSettings.GetBoolSetting("USER.SCRIPTS.PDF_Assistent.ProjectInOrdner", 1);
}
if (oSettings.ExistSetting("USER.SCRIPTS.PDF_Assistent.ProjectInOrdnerName"))
{
txtProjektGespeichertInOrdner.Text = oSettings.GetStringSetting("USER.SCRIPTS.PDF_Assistent.ProjectInOrdnerName", 0);
}
}
//Button: PDF Ordner auswählen
private void btnOrdnerAuswahl_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
folderBrowserDialog1.SelectedPath = txtSpeicherort.Text;
folderBrowserDialog1.Description = "Wählen Sie den Zielordner aus in dem die PDF-Datei gespeichert werden soll:";
DialogResult result = folderBrowserDialog1.ShowDialog();
if (result == DialogResult.OK)
{
string sSpeicherort = folderBrowserDialog1.SelectedPath;
if (!sSpeicherort.EndsWith(@"\"))
{
sSpeicherort += @"\";
}
txtSpeicherort.Text = sSpeicherort;
}
}
//Button: Speichern
private void btnSpeichern_Click(object sender, EventArgs e)
{
WriteSettings();
}
//XML-Reader
private static string ReadXml(string filename, int ID)
{
string strLastVersion = "";
XmlTextReader reader = new XmlTextReader(filename);
while (reader.Read())
{
if (reader.HasAttributes)
{
while (reader.MoveToNextAttribute())
{
if (reader.Name == "id")
{
if (reader.Value == ID.ToString())
{
strLastVersion = reader.ReadString();
reader.Close();
return strLastVersion;
}
}
}
}
}
return strLastVersion;
}
//Test-Button
private void button1_Click(object sender, EventArgs e)
{
string filename = PathMap.SubstitutePath("$(PROJECTPATH)" + @"\" + "Projectinfo.xml");
string LastVersion = ReadXml(filename, 10043);
MessageBox.Show(
"Zuletzt verwendete EPLAN-Version:\n"
+ LastVersion,
"Information",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
}
//Button: Projekt Ordner auswählen
private void btnProjektOrdnerAuswahl_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
folderBrowserDialog1.SelectedPath = txtProjektGespeichertInOrdner.Text;
folderBrowserDialog1.Description = "Wählen Sie den Ordner aus in dem das Projekt gespeichert sein muss:";
DialogResult result = folderBrowserDialog1.ShowDialog();
if (result == DialogResult.OK)
{
string sSpeicherort = folderBrowserDialog1.SelectedPath;
if (!sSpeicherort.EndsWith(@"\"))
{
sSpeicherort += @"\";
}
txtProjektGespeichertInOrdner.Text = sSpeicherort;
}
}
//Ist in Ordner hat sich geändert
private void chkIstInProjektOrdner_CheckedChanged(object sender, EventArgs e)
{
if (chkIstInProjektOrdner.Checked)
{
txtProjektGespeichertInOrdner.Enabled = true;
btnProjektOrdnerAuswahl.Enabled = true;
}
else
{
txtProjektGespeichertInOrdner.Enabled = false;
btnProjektOrdnerAuswahl.Enabled = false;
}
}
Weltklasse Scripte. Aber…
Was müsste man ändern, dass PDFs von allen Projekten erzeugt werden die sich gerade im Seitenbau befinden. Es wird leider nur das Projekt abgefragt, dass gerade geöffnet wurde. Eine Abfrage für jedes Projekt, dass sich gerade im Seitenbau befindet wäre klasse.
Über `SelectionSet` kommst du wahrscheinlich an die markierten Projekte und könntest dann die Ausgabe für alle einbauen.
Vielen Dank für dieses super Script.
Was muss im Script verändert werden, damit dieses Script in der Eplan Version 2023 in ein Menü eingefügt werden kann?
Einfach einen Befehl im Menüband erstellen mit dieser Befehlszeile:
PDFAssistent_Start