For the complete documentation index, see llms.txt. This page is also available as Markdown.

Convert CAD / DWG to PDF on Server/Desktop

Requirements

These packages are required to use these features in production. Trial keys have unlimited access to all features

Package: CAD ConversionModule: CADLive demo

CAD Module is a new optional add-on utility which can be used with Apryse SDK 7.0 or later to convert CAD documents to PDF while preserving layers without any external dependencies. Supported CAD formats include DWG, DWF, DXF, and DGN can be directly converted to PDF using the PDF.Convert.FromCAD method with this module. Beta support for RVT format is also available on Windows.

You can find more details about how to install CAD Module.

Supported formats

File Format
Supported Versions

DGN

V7, V8

DXF, DWF, DWG

AutoCAD R12 and newer

RVT *

All ✓

* RVT format is currently on beta support only for Microsoft Windows

Usage

To use the CAD Module, you must use the PDFNet.AddResourceSearchPath method with the path to the module's Lib/ folder to include the module files.

PDFNet.Initialize();
PDFNet.AddResourceSearchPath("relative/path/to/Lib/");
if (!CADModule.IsModuleAvailable())
{
    Console.WriteLine("Apryse SDK CAD module not available.");
}
PDFNet::Initialize();
PDFNet::AddResourceSearchPath("relative/path/to/Lib/");
if(!CADModule::IsModuleAvailable())
{
  cout << "Apryse SDK CAD module not available." << endl;
}
PDFNet.initialize();
// use a try-catch block here to catch PDFNetException
PDFNet.addResourceSearchPath("relative/path/to/Lib/");
if(!CADModule.isModuleAvailable())
{
  System.out.println("Apryse SDK CAD module not available.");
}
const main = async () => {
  // use a try-catch block here to catch PDFNetException
  PDFNet.addResourceSearchPath("relative/path/to/Lib/");
  if (!(await PDFNet.CADModule.isModuleAvailable())) 
  {
    console.log("Apryse SDK CAD module not available.");
  }
}
PDFNet.runWithCleanup(main).then(function(){ PDFNet.shutdown(); });

If the module has been successfully added, you can use the Convert.FromCAD method. This method requires that you pass in a PDFDoc object that will append converted pages to the specified PDF document.

Conversion options

You can also optionally provide a CADConvertOptions as an argument to change the PageHeight and PageWidth attributes for the conversion of the CAD document. If your document is of the RVT format, you can also set the RasterDPI and Sheets attributes to control the rasterization resolution and list of sheets to be converted (RVT beta support currently only available on Windows). You must call the AddSheets method multiple times depending on the number of sheets you would like to add.

Layers

By default, layers present in the original CAD drawing will be preserved as Optional Content Groups (OCGs) in the PDF. OCGs can be extracted, edited, manipulated, and removed with Apryse SDK. They can also be rendered into a viewer where users can interact with them.

Sample

The CAD Module ships with the CAD2PDFTest sample which can be used to test the conversion functionality using provided test files or your own documents. The sample first initializes PDFNet, which is required for all Apryse SDK functionality, then uses PDFNet.AddResourceSearchPath to include the CAD Module. The same lines of code can be used to integrate the module in your application or project. Code sample is available in C++, C#, Java, Python, Go, PHP, Ruby & VB.

The CAD2PDFTest sample also shows how to check if a file is of RVT file format and uses CADConvertOptions to convert to PDF (currently only supported on Windows).

Troubleshooting

Fonts

For best results, the CAD Module requires access to the fonts (SHX, RSC and TTF) used in the drawing. If the requisite fonts are not embedded in the drawing and not installed on your server, the CAD Module will use its own bundled fonts (located in the in fonts/ folder within the CAD module package) as substitutes for the originals. The specifics of the substitution mappings are defined in a file called substitution.json (which is also located in the fonts/ folder). If necessary, this file can be customized to define different font mappings or add new mappings. The JSON has following entries:

  • fontFileMappings:

    • This is where direct substitutions based on font file name are specified.

    • For each font you want to replace, you can define multiple fonts in list form. CAD Module searches fonts one by one from the beginning of the list and choose the first font that is found.

  • fallbackFonts:

    • This is where fallback fonts are defined.

    • Fallback fonts for monospaced and proportional font are defined separately.

    • You can define/customize fallback fonts for each language as needed; default ones are used otherwise.

An alternative way of performing direct substitutions for a font is to provide a font file and name it as "<target_font_name>_fallback.[ttf | ttc |otf]". For example, if you want to map iso8.shx to a TTF font, then name your TTF file to iso8_fallback.ttf and place it in the location discoverable by the CAD Module (you can use PDFNet.AddResourceSearchPath() to specify the location of the font). Note that the fallback font name must be in lowercase. This method takes priority over the JSON file method.

Fonts for DGN when resource files (.rsc) are not present

There are times when a DGN CAD file uses fonts that are packaged in resource files (.rsc), but these files are not available where the DGN file is loaded from.

Without the .rsc files present alongside the .dgn, there is no way to get the equivalent font data for the fonts used in the DGN file which are specified using font ID numbers. Font ID numbers may be different from the known standard ones which can be mapped internally to known font names. In this case, the DGN may, in some cases, have font names provided as hints. We can map these names to TrueType font file names.

For example, to map the names Arial, Arial Narrow, and Arial Bold, you can add the following lines to the substitutions.json in the fontFileMappings section:

You can then copy, or make available, the corresponding files (e.g. arial``n``.ttf, arial``b``.ttf, and arial.ttf) under the fonts folder which is in the module binary’s folder, in the same location where the .DGN file is located. Alternatively, you can use PDFNet.AddResourceSearchPath() to specify the location of the files.

OpenGL

On Linux CADModule uses OpenGL API for rendering 3D objects. In a headless server environment (i.e., without monitors/graphical drivers) implementation of OpenGL specification needs to be provided. One such implementation is Mesa. On headless Linux you may need to install libgl1-mesa-dev, libx11-dev and libglu1-mesa-dev.

Custom Plot Styles

The CAD module supports optionally applying some style changes when converting a CAD file to PDF.

This section describes the format for the the Plot-styles JSON object which can be provided by the user to specify custom plot styles when converting a CAD drawing to PDF.

Plot styles JSON location

To provide plot style changes/override, a Plot-styles JSON object can be authored and saved in a .json file. The CAD module tries to load the settings for plot styles from the following locations:

  • The CAD file folder

  • The CAD Module binary's folder

  • The current working directory of the process

The name of the plot style settings JSON file would be:

  • cadstyledwg.json for DWG files.

  • cadstyledgn.json for DGN files.

  • cadstyle.json if neither of the above are found.

Example of Plot-styles object in JSON

The following is a sample of using the plot-styles object.

Accepted values for LineType entry

Acceptable values for the LineType entry from the example above include:

"solid", "dashed", "dotted", "dash-dot", "short-dash", "medium-dash", "long-dash", "short-dash-x2", "medium-dash-x2", "long-dash-x2", "medium-long-dash", "medium-dash-short-dash-short-dash", "long-dash-short-dash", "long-dash-dot-dot", "long-dash-dot", "medium-dash-short-dash-dot", "sparse-dot", "iso-dash", "iso-dash-space", "iso-long-dash-dot", "iso-long-dash-double-dot", "iso-long-dash-triple-dot", "iso-dot", "iso-long-dash-short-dash", "iso-long-dash-double-short-dash", "iso-dash-dot", "iso-double-dash-dot", "iso-dash-double-dot", "iso-double-dash-double-dot", "iso-dash-triple-dot", "iso-double-dash-triple-dot"

Accepted values for LineEndType entry

Acceptable values for the LineEndType entry from the example above include:

"butt", "square", "round", "diamond"

Accepted values for LineJoinType entry

Acceptable values for the LineJoinType entry from the example above include:

"miter", "bevel", "round", "diamond"

Accepted values for FillType entry

Acceptable values for the FillType entry from the example above include:

"solid", "checkerboard", "crosshatch", "diamonds", "horizontal-bars", "slant-left", "slant-right", "square-dots", "vertical-bars"

Last updated

Was this helpful?