Back to blog
PDF exporteren vanuit AutoCAD met C#

PDF exporteren vanuit AutoCAD met C#

David De Lombaerde David De Lombaerde · juli 10, 2026 · 16 min read

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().

Share this article

LinkedIn WhatsApp X

Comments

No comments yet — be the first!

Leave a comment

Sign in to skip moderation — anonymous comments are reviewed before appearing.