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!

PDF_1

PDF_2

PdfExportAssistent (1365 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;
	}
}