将 CAD 图纸转换为 PDF 和栅格图像格式

将 CAD 图纸转换为栅格图像格式

Aspose.CAD for Java 能够将支持的栅格图像格式(如 DXFDWG)转换为支持的栅格图像格式,如 PNGBMPTIFFJPEGGIF。Aspose.CAD for Java API 提供了高效且易于使用的方法来实现这一目标。 您可以通过以下简单步骤将任何支持的 CAD 图纸格式转换为栅格图像格式。

  1. 将 CAD 文件加载到 Image 实例中。
  2. 创建一个 CadRasterizationOptions 的实例,并设置其必需属性,例如 PageWidthPageHeight
  3. 创建一个 ImageOptionsBase 的实例,并将其 VectorRasterizationOptions 属性设置为前一步创建的 CadRasterizationOptions 实例。
  4. 调用 Image.save,传递文件路径(或 MemoryStream 对象)以及前一步创建的 ImageOptionsBase 实例。

以下是完整的源代码。

String srcFile = dataDir + "conic_pyramid.dxf";
Image image = Image.load(srcFile);
// Create an instance of CadRasterizationOptions
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
// Set page width & height
rasterizationOptions.setPageWidth(1200);
rasterizationOptions.setPageHeight(1200);
// Create an instance of PngOptions for the resultant image
ImageOptionsBase options = new PngOptions();
//Set rasterization options
options.setVectorRasterizationOptions(rasterizationOptions);
// Save resultant image
image.save(dataDir + "conic_pyramid_raster_image_out_.png", options);

默认情况下,该 API 仅呈现 “Model” 布局。然而,在将 CAD 图纸转换为图像格式时,您也可以指定您选择的布局。

自定义 CAD 转换

CAD 到 PDF 和 CAD 到栅格图像的转换过程具有高度可配置性,因为 CadRasterizationOptions 类的实现方式提供了许多可选功能,设置后可以根据应用程序的需要覆盖渲染过程。

CadRasterizationOptions 类

CadRasterizationOptions 类适用于所有支持的 CAD 格式,如 DWGDXF,因此本文中分享的信息对这两种 CAD 格式均有效。

最有用的 CadRasterizationOptions 类属性包括:

属性默认值是否必需描述
PageWidth0指定页面宽度。
PageHeight0指定页面高度
ScaleMethodScaleType.ShrinkToFit指定绘图是否应自动缩放。默认值自动缩小图像以适应画布大小。切换到 GrowToFit 模式,或使用 None 设置以禁用自动缩放。
BackgroundColorColor.White指定输出图像的背景颜色。
DrawTypeCadDrawTypeMode.UseDrawColor指定实体的着色模式。使用 UseObjectColor 选项来使用其原生颜色绘制实体,或使用 UseDrawColor 选项来覆盖原生颜色。
DrawColorColor.Black指定被覆盖实体的颜色(仅当 DrawType 设置为 UseDrawColor 属性值时)。
AutomaticLayoutsScalingFalse指定是否必须执行自动布局缩放,以匹配模型布局。

设置画布大小和模式

从 CAD 导出到 PDF 或 CAD 导出到栅格图像格式并不是一项简单的任务。由于生成的 PDF 或图像需要定义画布大小,因此我们需要显式指定 PDF 页面以正确呈现图纸的输出尺寸。明确设置 CadRasterizationOptions.PageWidthCadRasterizationOptions.PageHeight 属性,否则您可能会遇到 ImageSaveException

此外,您可以指定尺寸缩放选项。缩放选项由 CadRasterizationOptions.ScaleMethod 属性设置。使用此选项根据 CadRasterizationOptions.PageWidthCadRasterizationOptions.PageHeight 值自动调整图像尺寸。默认情况下 CadRasterizationOptions.ScaleMethod 设置为 ScaleType.ShrinkToFit 模式。此属性定义以下行为:

  • 如果 CAD 绘图尺寸大于结果画布大小,则绘图尺寸将缩小以适应结果画布,同时保持纵横比。
  • 如果 CAD 绘图尺寸小于结果画布大小,请将 CadRasterizationOptions.ScaleMethod 属性设置为 ScaleType.GrowToFit,以增加绘图大小以适应 PDF 画布,同时保持纵横比。
  • 或者使用 ScaleType.None 选项禁用自动缩放。

下面的代码示例展示了自动缩放选项的使用。

String srcFile = dataDir + "conic_pyramid.dxf";
com.aspose.cad.Image objImage = com.aspose.cad.Image.load(srcFile);
// Create an instance of CadRasterizationOptions and set its various properties
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
rasterizationOptions.setPageWidth(1600);
rasterizationOptions.setPageHeight(1600);
rasterizationOptions.setAutomaticLayoutsScaling(true);
rasterizationOptions.setNoScaling(true);
// Create an instance of PdfOptions
PdfOptions pdfOptions = new PdfOptions();
// Set the VectorRasterizationOptions property
pdfOptions.setVectorRasterizationOptions(rasterizationOptions);
// Export CAD to PDF
objImage.save(dataDir +"result_out_.pdf", pdfOptions);
// Create an instance of TiffOptions
TiffOptions tiffOptions = new TiffOptions(TiffExpectedFormat.Default);
// Set the VectorRasterizationOptions property
tiffOptions.setVectorRasterizationOptions(rasterizationOptions);
// Export CAD to TIFF
objImage.save(dataDir + "result_out_.tiff", tiffOptions);

设置背景和绘图颜色

默认情况下,结果画布的颜色调色板设置为通用文档方案。这意味着 CAD 绘图内的所有实体都用黑色钢笔绘制在纯白色背景上。这些设置可以通过 CadRasterizationOptions.BackgroundColorCadRasterizationOptions.DrawColor 属性更改。更改 CadRasterizationOptions.DrawColor 属性也需要设置 CadRasterizationOptions.DrawType 属性,以便使用所用的绘图颜色。CadRasterizationOptions.DrawType 属性控制 CAD 实体是否保留其颜色或转换为自定义颜色。要保留实体颜色,请将 CadRasterizationOptions.DrawType 设置为 CadDrawTypeMode.UseObjectColor,否则请指定 CadDrawTypeMode.UseDrawColor 值。

下面的代码示例展示了如何使用不同的颜色属性。

String srcFile = dataDir + "conic_pyramid.dxf";
// Image image = Image.load(srcFile);
com.aspose.cad.Image objImage = com.aspose.cad.Image.load(srcFile);
// Create an instance of CadRasterizationOptions and set its various properties
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
rasterizationOptions.setPageWidth(1600);
rasterizationOptions.setPageHeight(1600);
rasterizationOptions.setBackgroundColor(com.aspose.cad.Color.getBeige());
rasterizationOptions.setDrawType(CadDrawTypeMode.UseDrawColor);
rasterizationOptions.setBackgroundColor(com.aspose.cad.Color.getBlue());
// Create an instance of PdfOptions
PdfOptions pdfOptions = new PdfOptions();
// Set the VectorRasterizationOptions property
pdfOptions.setVectorRasterizationOptions(rasterizationOptions);
// Export CAD to PDF
objImage.save(dataDir +"result_out_.pdf", pdfOptions);
// Create an instance of TiffOptions
TiffOptions tiffOptions = new TiffOptions(TiffExpectedFormat.Default);
// Set the VectorRasterizationOptions property
tiffOptions.setVectorRasterizationOptions(rasterizationOptions);
// Export CAD to TIFF
objImage.save(dataDir + "result_out_.tiff", tiffOptions);

设置自动布局缩放

大多数 CAD 图纸在单个文件中存储了多个布局,每个布局可能具有不同的尺寸。在将此类 CAD 图纸呈现为 PDF 时,PDF 的每一页都可能会根据布局大小具有不同的缩放比例。为了使渲染均匀,Aspose.CAD API 提供了 CadRasterizationOptions.AutomaticLayoutsScaling 属性。其默认值为 false,但当设置为 true 时,API 将尝试为每个单独的布局搜索相应的缩放比例,并通过根据页面大小执行自动调整操作以相应的方式绘制它们。

以下是 CadRasterizationOptions.AutomaticLayoutsScaling 属性与 CadRasterizationOptions.ScaleMethod 属性协作的工作原理。

  1. 如果 ScaleMethod 设置为 ScaleType.ShrinkToFitScaleType.GrowToFit,同时 AutomaticLayoutsScaling 设置为 false,则所有布局(包括模型)将根据第一个选项处理。
  2. 如果 ScaleMethod 设置为 ScaleType.ShrinkToFitScaleType.GrowToFit,同时 AutomaticLayoutsScaling 设置为 true,则将根据其大小处理所有布局(模型除外),而模型将根据第一个选项处理。
  3. 如果 ScaleMethod 设置为 ScaleType.None,而 AutomaticLayoutsScaling 设置为 true 或 false,则不会执行任何缩放。

下面的代码示例展示了如何设置 CAD 到 PDF 转换的自动布局缩放。

String srcFile = dataDir + "conic_pyramid.dxf";
Image image = Image.load(srcFile);
// Create an instance of CadRasterizationOptions and set its various properties
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
rasterizationOptions.setPageWidth(1600);
rasterizationOptions.setPageHeight(1600);
// Set Auto Layout Scaling
rasterizationOptions.setAutomaticLayoutsScaling(true);
// Create an instance of PdfOptions
PdfOptions pdfOptions = new PdfOptions();
// Set the VectorRasterizationOptions property
pdfOptions.setVectorRasterizationOptions(rasterizationOptions);
// Export the CAD to PDF
image.save(dataDir + "result_out_.pdf", pdfOptions);

将 CAD 布局转换为栅格图像格式

Aspose.CAD for Java API 可以将支持格式(如 DXF 和 DWG)的 CAD 布局转换为 PNG、BMP、TIFF、JPEG 和 GIF 等栅格图像。该 API 还支持将 CAD 绘图的特定布局呈现为不同的 PSD 图层。 Aspose.CAD for Java API 提供了高效且易于使用的方法,以指定所需的 CAD 布局列表并将其呈现为栅格图像格式。您可以通过下列 5 个简单步骤实现相同的目标。

  1. 使用工厂方法 load 将 CAD 文件加载到 Image 的实例中。
  2. 创建一个 CadRasterizationOptions 的实例,并设置其必需属性,如 PageWidthPageHeight
  3. 使用 CadRasterizationOptions.Layouts 属性指定所需的布局名称。
  4. 创建一个 ImageOptionsBase 的实例,并将其 VectorRasterizationOptions 属性设置为前一步创建的 CadRasterizationOptions 实例。
  5. 调用 Image.Save,传递文件路径(或 MemoryStream 对象)以及前一步创建的 ImageOptionsBase 实例。

以下是完整的源代码。

String srcFile = dataDir + "conic_pyramid.dxf";
Image image = Image.load(srcFile);
// Create an instance of CadRasterizationOptions
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
// Set page width & height
rasterizationOptions.setPageWidth(1200);
rasterizationOptions.setPageHeight(1200);
// Specify a list of layout names
rasterizationOptions.setLayouts(new String[] {"Model", "Layout1"});
// Create an instance of TiffOptions for the resultant image
ImageOptionsBase options = new TiffOptions(TiffExpectedFormat.Default);
// Set rasterization options
options.setVectorRasterizationOptions(rasterizationOptions);
// Save resultant image
image.save(dataDir + "conic_pyramid_layoutstorasterimage_out_.tiff", options);

 

启用 CAD 渲染过程的跟踪

Aspose.CAD 引入了一系列类和支持的枚举字段,以帮助跟踪 CAD 渲染过程。通过这些更改,CAD 到 PDF 的转换现在可以在启用跟踪的状态下进行,如下所示。

// For complete examples and data files, please go to https://github.com/aspose-cad/Aspose.CAD-for-Java
// The path to the resource directory.
String dataDir = Utils.getDataDir(EnableTracking.class) + "DXFDrawings/";
Image image = Image.load(dataDir + "conic_pyramid.dxf");
{
OutputStream stream = new FileOutputStream(dataDir + "output_conic_pyramid.pdf");
{
PdfOptions pdfOptions = new PdfOptions();
CadRasterizationOptions cadRasterizationOptions = new CadRasterizationOptions();
pdfOptions.setVectorRasterizationOptions(cadRasterizationOptions);
cadRasterizationOptions.setPageWidth(800);
cadRasterizationOptions.setPageHeight(600);
cadRasterizationOptions.RenderResult = new ErrorHandler();
System.out.println("Exporting to pdf format");
image.save(stream, pdfOptions);
}
}
// For complete examples and data files, please go to https://github.com/aspose-cad/Aspose.CAD-for-Java
public static class ErrorHandler extends CadRasterizationOptions.CadRenderHandler
{
@Override
public void invoke(CadRenderResult result) {
System.out.println("Tracking results of exporting");
if (result.isRenderComplete())
return;
System.out.println("Have some problems:");
int idxError = 1;
for (RenderResult rr : result.getFailures())
{
System.out.printf("{0}. {1}, {2}", idxError, rr.getRenderCode(), rr.getMessage());
idxError++;
}
}
}

CAD 渲染过程的跟踪可以检测到以下可能的问题。

  1. 缺少或损坏的头信息。
  2. 缺少布局信息。
  3. 缺少块实体。
  4. 缺少尺寸样式。
  5. 缺少样式。

转换 CAD 图纸时替换字体

特别的 CAD 图纸可能使用某些在进行 CAD 到 PDF 或 CAD 到栅格图像转换的机器上不可用的特定字体。在这种情况下,Aspose.CAD API 将触发一个适当的异常,以突出缺少的字体并停止转换过程,因为 API 需要这些字体以便正确渲染生成的 PDF 和/或图像。 Aspose.CAD API 提供了一种简单的方法来使用机制将所需的字体替换为可用的字体。CadImage.Styles 属性返回 CadStylesDictionary 的实例,该实例包含 CAD 绘图中每个样式的 CadStyleTableObject,而 CadStyleTableObject.PrimaryFontName 可以用于指定可用的字体名称。

以下代码片段演示了如何使用 Aspose.CAD for Java API 更改 CAD 绘图中所有样式的字体。

String srcFile = dataDir + "conic_pyramid.dxf";
// Load a CAD drawing in an instance of CadImage
CadImage cadImage = (CadImage) Image.load(srcFile);
// Iterate over the items of CadStylesDictionary
for(Object style : cadImage.getStyles())
{
// Set the font name
((com.aspose.cad.fileformats.cad.cadtables.CadStyleTableObject)style).setPrimaryFontName("Arial");
}

通过样式名称访问唯一样式的字体也是可能的。以下代码片段演示了使用这种方法的示例。

String srcFile = dataDir + "conic_pyramid.dxf";
// Load a CAD drawing in an instance of CadImage
CadImage cadImage = (CadImage)Image.load(srcFile);
// Specify the font for one particular style
((com.aspose.cad.fileformats.cad.cadtables.CadStyleTableObject)cadImage.getStyles().get_Item(0)).setPrimaryFontName("Arial");

将 CAD 图层转换为栅格图像格式

Aspose.CAD for Java API 提供了一种高效且易于使用的方法来指定所需 CAD 图层的名称并将其转换为栅格图像格式。您可以通过以下 5 个简单步骤实现。

  1. 使用工厂方法 load 将 CAD 文件加载到 Image 实例中。
  2. 创建一个 CadRasterizationOptions 的实例,并设置其必需属性,如 PageWidthPageHeight
  3. 使用 CadRasterizationOptions.Layers.add 方法添加所需的图层名称。
  4. 创建一个 ImageOptionsBase 的实例,并将其 VectorRasterizationOptions 属性设置为前一步创建的 CadRasterizationOptions 实例。
  5. 调用 Image.save 方法,传递文件路径(或 MemoryStream 对象)以及前一步创建的 ImageOptionsBase 实例。

以下是完整的源代码。

// The path to the resource directory.
String dataDir = Utils.getDataDir(ConvertCADLayerToRasterImageFormat.class) + "CADConversion/";
String srcFile = dataDir + "conic_pyramid.dxf";
// Load a CAD drawing in an instance of Image
Image image = Image.load(srcFile);
// Create an instance of CadRasterizationOptions
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
// Set image width & height
rasterizationOptions.setPageWidth(500);
rasterizationOptions.setPageHeight(500);
List<String> stringList = new ArrayList<>(Arrays.asList("0"));
// Add the layer name to the CadRasterizationOptions's layer list
rasterizationOptions.setLayers(stringList);
// Create an instance of JpegOptions (or any ImageOptions for raster formats)
JpegOptions options = new JpegOptions();
// Set VectorRasterizationOptions property to the instance of CadRasterizationOptions
options.setVectorRasterizationOptions(rasterizationOptions);
// Export each layer to JPEG format
image.save(dataDir + "CADLayersToRasterImageFormats_out_.jpg", options);

将所有 CAD 图层转换为单独的图像

您可以使用 CadImage.Layers 获取 CAD 绘图中的所有图层,并将每个图层渲染为单独的图像,如下所示。

String srcFile = dataDir + "conic_pyramid.dxf";
// Load a CAD drawing in an instance of CadImage
CadImage image = (CadImage) Image.load(srcFile);
// Create an instance of CadRasterizationOptions
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
// Set image width & height
rasterizationOptions.setPageWidth(500);
rasterizationOptions.setPageHeight(500);
// Get the layers in an instance of CadLayersDictionary.
// Iterate over the layers
for (String layer : image.getLayers().getLayersNames())
{
// Display layer name for tracking
System.out.println("Start with " +layer);
List<String> stringList = Arrays.asList(layer);
// Add the layer name to the CadRasterizationOptions's layer list
rasterizationOptions.setLayers(stringList);
// Create an instance of JpegOptions (or any ImageOptions for raster formats)
JpegOptions options = new JpegOptions();
// Set VectorRasterizationOptions property to the instance of CadRasterizationOptions
options.setVectorRasterizationOptions(rasterizationOptions);
// Export each layer to JPEG format
image.save(dataDir + layer + "_out_.jpg", options);
}

将 DWF CAD 图层转换为栅格图像格式

Aspose.CAD for Java API 提供了一种高效且易于使用的方法来指定所需 CAD 图层的名称并将其转换为栅格图像格式。您可以通过以下 5 个简单步骤实现。

  1. 使用工厂方法 Load 将 DWF CAD 文件加载到 Image 实例中。
  2. 创建一个 CadRasterizationOptions 的实例,并设置其必需属性,如 PageWidthPageHeight
  3. 使用 CadRasterizationOptions.Layers.Add 方法添加所需的图层名称。
  4. 创建一个 ImageOptionsBase 的实例,并将其 VectorRasterizationOptions 属性设置为前一步创建的 CadRasterizationOptions 实例。
  5. 调用 Image.Save 方法,传递文件路径(或 MemoryStream 对象)以及前一步创建的 ImageOptionsBase 实例。

以下是完整的源代码。

String fileName = (dataDir + "site.dwf");
com.aspose.cad.Image image = com.aspose.cad.Image.load(fileName);
BmpOptions bmpOptions = new BmpOptions();
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
bmpOptions.setVectorRasterizationOptions(rasterizationOptions);
rasterizationOptions.setPageHeight(500);
rasterizationOptions.setPageWidth(500);
rasterizationOptions.setLayouts(new String[] { "Model" });
// export
String outPath = dataDir +"site.bmp";
image.save(outPath, bmpOptions);