Exporting DWG/DXF drawing and layouts into specified size

Export Model and all layouts into A4 PDF size

Aspose.CAD API allows you to export all sheets of the DWG/DXF file into specified physical PDF size.

The following sample code sets up the size of the CadRasterizationOptions object to achieve desired PDF size. The size of A4 paper sheet is 210x297 millimeters or 8.27x11.69 inches and these values are used in the code.

bool currentUnitIsMetric = false;
double currentUnitCoefficient = 1.0;
DefineUnitSystem(cadImage.UnitType, out currentUnitIsMetric, out currentUnitCoefficient);
if (currentUnitIsMetric)
{
double metersCoeff = 1 / 1000.0;
double scaleFactor = metersCoeff / currentUnitCoefficient;
rasterizationOptions.PageWidth = (float)(210 * scaleFactor);
rasterizationOptions.PageHeight = (float)(297 * scaleFactor);
rasterizationOptions.UnitType = UnitType.Millimeter;
}
else
{
rasterizationOptions.PageWidth = (float)(8.27f / currentUnitCoefficient);
rasterizationOptions.PageHeight = (float)(11.69f / currentUnitCoefficient);
rasterizationOptions.UnitType = UnitType.Inch;
}
private static void DefineUnitSystem(UnitType unitType, out bool isMetric, out double coefficient)
{
isMetric = false;
coefficient = 1.0;
switch (unitType)
{
case UnitType.Parsec:
coefficient = 3.0857 * 10000000000000000.0;
isMetric = true;
break;
case UnitType.LightYear:
coefficient = 9.4607 * 1000000000000000.0;
isMetric = true;
break;
case UnitType.AstronomicalUnit:
coefficient = 1.4960 * 100000000000.0;
isMetric = true;
break;
case UnitType.Gigameter:
coefficient = 1000000000.0;
isMetric = true;
break;
case UnitType.Kilometer:
coefficient = 1000.0;
isMetric = true;
break;
case UnitType.Decameter:
isMetric = true;
coefficient = 10.0;
break;
case UnitType.Hectometer:
isMetric = true;
coefficient = 100.0;
break;
case UnitType.Meter:
isMetric = true;
coefficient = 1.0;
break;
case UnitType.Centimenter:
isMetric = true;
coefficient = 0.01;
break;
case UnitType.Decimeter:
isMetric = true;
coefficient = 0.1;
break;
case UnitType.Millimeter:
isMetric = true;
coefficient = 0.001;
break;
case UnitType.Micrometer:
isMetric = true;
coefficient = 0.000001;
break;
case UnitType.Nanometer:
isMetric = true;
coefficient = 0.000000001;
break;
case UnitType.Angstrom:
isMetric = true;
coefficient = 0.0000000001;
break;
case UnitType.Inch:
coefficient = 1.0;
break;
case UnitType.MicroInch:
coefficient = 0.000001;
break;
case UnitType.Mil:
coefficient = 0.001;
break;
case UnitType.Foot:
coefficient = 12.0;
break;
case UnitType.Yard:
coefficient = 36.0;
break;
case UnitType.Mile:
coefficient = 63360.0;
break;
}
}

Export CAD Layouts to PDF in different size

Sometimes it is required to export layout into its physical size. The example below demonstrates the export of the drawing into multipage PDF where each page with layout content has its own physical PDF size. This example uses LayoutPageSizes property.

using (CadImage cadImage = (CadImage)Image.Load(fileName))
{
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
foreach (CadLayout layout in cadImage.Layouts.Values)
{
if (layout.LayoutName == "Model") continue;
SizeF pageSize = GetPageSizeFromLayout(layout);
rasterizationOptions.LayoutPageSizes.Add(layout.LayoutName, pageSize);
}
PdfOptions pdfOptions = new PdfOptions();
pdfOptions.VectorRasterizationOptions = rasterizationOptions;
cadImage.Save(outPath, pdfOptions);
}
private static SizeF GetPageSizeFromLayout(CadLayout layout)
{
var isLandscape = IsLayoutLandscape(layout);
float pageWidth;
float pageHeight;
if (layout.PlotPaperUnits == CadPlotPaperUnits.PlotInInches)
{
pageWidth = (float)MillimetersToInches(layout.PlotPaperSize.Width);
pageHeight = (float)MillimetersToInches(layout.PlotPaperSize.Height);
}
else
{
pageWidth = (float)layout.PlotPaperSize.Width;
pageHeight = (float)layout.PlotPaperSize.Height;
}
if (isLandscape)
{
return new SizeF(pageHeight, pageWidth);
}
else
{
return new SizeF(pageWidth, pageHeight);
}
}
private static bool IsLayoutLandscape(CadLayout layout)
{
return layout.PlotRotation == CadPlotRotation.Clockwise90Degrees || layout.PlotRotation == CadPlotRotation.Counterclockwise90Degrees;
}
private static double MillimetersToInches(double millimeters)
{
const double MillimetersToInchesFactor = 0.0393701;
return millimeters * MillimetersToInchesFactor;
}