PDF-export is een van de meest gevraagde functies in AutoCAD-automatisering: tekeningen exporteren vanuit een batchscript, meerdere layouts samenvoegen tot één PDF, of een vaste bestandsnaming afdwingen. In dit artikel leer je hoe je via C# en de AutoCAD .NET Plot-API PDFs genereert zonder dat de gebruiker iets hoeft te doen.
Twee methoden voor PDF-export
Je hebt twee routes: de Plot-API (PlotEngine) en de PrintDocument-benadering via een virtuele PDF-printer. De Plot-API is krachtiger en meer configureerbaar; de PDF-printer vereist dat "DWG To PDF.pc3" aanwezig is als apparaatconfiguratie in AutoCAD. Wij gebruiken de Plot-API.
Benodigde namespaces
using Autodesk.AutoCAD.PlottingServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Geometry;
Huidige layout naar PDF exporteren
[CommandMethod("EXPORTPDF")]
public void ExportPdf()
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
using (var tr = db.TransactionManager.StartTransaction())
{
// Haal de actieve layout op
var layoutId = db.CurrentSpaceId;
var layout = (Layout)tr.GetObject(
((BlockTableRecord)tr.GetObject(layoutId, OpenMode.ForRead)).LayoutId,
OpenMode.ForRead);
ExportLayoutNaarPdf(doc, layout, @"C:\Output ekening.pdf");
tr.Commit();
}
ed.WriteMessage("\nPDF opgeslagen.");
}
private void ExportLayoutNaarPdf(Document doc, Layout layout, string uitvoerpad)
{
var db = doc.Database;
var plotInfo = new PlotInfo();
plotInfo.Layout = layout.ObjectId;
// Plotinstellingen aanmaken
var plotSettings = new PlotSettings(layout.ModelType == false);
plotSettings.CopyFrom(layout);
var psv = PlotSettingsValidator.Current;
// Apparaat: DWG To PDF
psv.SetPlotConfigurationName(plotSettings, "DWG To PDF.pc3", "ISO_A4_(210.00_x_297.00_MM)");
psv.SetUseStandardScale(plotSettings, true);
psv.SetStdScaleType(plotSettings, StdScaleType.ScaleToFit);
psv.SetPlotCentered(plotSettings, true);
psv.SetPlotType(plotSettings, Autodesk.AutoCAD.DatabaseServices.PlotType.Extents);
plotInfo.OverrideSettings = plotSettings;
var plotInfoValidator = new PlotInfoValidator();
plotInfoValidator.MediaMatchingPolicy = MatchingPolicy.MatchEnabled;
plotInfoValidator.Validate(plotInfo);
using (var pe = PlotFactory.CreatePublishEngine())
{
var plotProgressDlg = new PlotProgressDialog(false, 1, true);
plotProgressDlg.set_PlotMsgString(PlotMessageIndex.DialogTitle, "PDF exporteren");
plotProgressDlg.set_PlotMsgString(PlotMessageIndex.CancelJobButtonMessage, "Annuleer");
plotProgressDlg.IsVisible = false;
pe.BeginPlot(plotProgressDlg, null);
pe.BeginDocument(plotInfo, doc.Name, null, 1, true, uitvoerpad);
var sheetInfo = new PlotPageInfo();
pe.BeginPage(sheetInfo, plotInfo, true, null);
pe.BeginGenerateGraphics(null);
pe.EndGenerateGraphics(null);
pe.EndPage(null);
pe.EndDocument(null);
pe.EndPlot(null);
}
}
Alle layouts naar één PDF samenvoegen
Via de Publisher-klasse kun je meerdere layouts bundelen in één PDF-bestand. Dit is ideaal voor tekenpakketten.
[CommandMethod("EXPORTALLPDF")]
public void ExportAlleLayoutsNaarPdf()
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
using (var tr = db.TransactionManager.StartTransaction())
{
var layoutMgr = LayoutManager.Current;
var uitvoerpad = @"C:\Outputolledig_pakket.pdf";
// Verzamel alle layouts (behalve Model)
var sheets = new DsdEntryCollection();
foreach (string layoutNaam in layoutMgr.GetLayoutNames())
{
if (layoutNaam == "Model") continue;
var entry = new DsdEntry
{
DwgName = doc.Name,
Layout = layoutNaam,
Title = layoutNaam,
Nps = "" // no plot stamp
};
sheets.Add(entry);
}
var dsdData = new DsdData();
dsdData.SetDsdEntryCollection(sheets);
dsdData.SetUnrecognizedData("PwdProtectPublishedDWF", "FALSE");
dsdData.SetUnrecognizedData("PromptForDwfName", "FALSE");
dsdData.SetUnrecognizedData("PublishCollateSheets", "FALSE");
// Publiceer naar PDF
var pub = new Publisher();
var progressDlg = new PlotProgressDialog(false, sheets.Count, true);
pub.PublishExecute(dsdData, progressDlg);
tr.Commit();
doc.Editor.WriteMessage($"\nPDF opgeslagen: {uitvoerpad}");
}
}
Plotstijlen en lijngewichten instellen
Plotstijltabellen (.ctb of .stb) bepalen hoe kleuren en lagen worden omgezet naar pen- en lijngewichten in de PDF. Koppel een plotstijl via PlotSettingsValidator:
psv.SetCurrentStyleSheet(plotSettings, "monochrome.ctb");
Paginaformaat instellen
// Standaard ISO A3:
psv.SetPlotConfigurationName(plotSettings, "DWG To PDF.pc3", "ISO_A3_(297.00_x_420.00_MM)");
// Aangepast formaat:
psv.SetPlotPaperSize(plotSettings, new PlotPaperSize("Aangepast", 400, 300));
Batchverwerking van meerdere DWG-bestanden
public void BatchExportMap(string map)
{
foreach (var dwgPad in Directory.GetFiles(map, "*.dwg"))
{
using (var db = new Database(false, true))
{
db.ReadDwgFile(dwgPad, FileOpenMode.OpenForReadAndAllShare, false, "");
using (var tr = db.TransactionManager.StartTransaction())
{
var layoutMgr = LayoutManager.Current;
// ... export per bestand
tr.Commit();
}
}
Application.DocumentManager.MdiActiveDocument.Editor
.WriteMessage($"\nVerwerkt: {Path.GetFileName(dwgPad)}");
}
}
Foutafhandeling
Plot-operaties kunnen mislukken als de PDF-driver niet is geïnstalleerd of als het uitvoerpad niet beschrijfbaar is. Omsluit altijd met een try-catch en log fouten:
try
{
ExportLayoutNaarPdf(doc, layout, uitvoerpad);
}
catch (System.Exception ex)
{
doc.Editor.WriteMessage($"\nFOUT bij PDF-export: {ex.Message}");
// Log naar bestand voor batchverwerking
File.AppendAllText(@"C:\Output\export_log.txt",
$"{DateTime.Now}: {Path.GetFileName(doc.Name)} — {ex.Message}\n");
}
Veelgemaakte fouten
DWG To PDF.pc3 niet gevonden — controleer of de driver geïnstalleerd is via AutoCAD's Plotters-map (%APPDATA%\Autodesk\AutoCAD 202x\Rxx\enu\Plotters).
PlotProgressDialog moet zichtbaar zijn — in sommige AutoCAD-versies moet de voortgangsdialoog minimaal gecreëerd worden, zelfs als je hem verbergt.
Layout "Model" meenemen per ongeluk — filter model-ruimte er altijd uit (layout.ModelType == true) tenzij je de modelruimte expliciet wil plotten.
Samenvatting
Met de AutoCAD Plot-API kun je volledig geautomatiseerde PDF-workflows opzetten: van één layout exporteren tot complete tekenpakketten genereren vanuit een batchscript. De sleutelbouwstenen zijn PlotInfo, PlotSettings, PlotSettingsValidator en PlotFactory.CreatePublishEngine().
Comments
No comments yet — be the first!
Leave a comment
Sign in to skip moderation — anonymous comments are reviewed before appearing.