将 CAD 图纸转换为 PDF 和栅格图像格式
Aspose.CAD for Java 直接在输出文档中写入 API 和版本号的信息。例如,在将文档呈现为 PDF 时,Aspose.CAD for Java 将应用程序字段填充为 ‘Aspose.CAD’,PDF 生成器字段填充为值,例如 ‘Aspose.CAD v 17.9’。
请注意,您无法指示 Aspose.CAD for Java 更改或删除此信息。
将 CAD 图纸转换为栅格图像格式
Aspose.CAD for Java 能够将支持的栅格图像格式(如 DXF 和 DWG)转换为支持的栅格图像格式,如 PNG、BMP、TIFF、JPEG 和 GIF。Aspose.CAD for Java API 提供了高效且易于使用的方法来实现这一目标。 您可以通过以下简单步骤将任何支持的 CAD 图纸格式转换为栅格图像格式。
- 将 CAD 文件加载到 Image 实例中。
- 创建一个 CadRasterizationOptions 的实例,并设置其必需属性,例如 PageWidth 和 PageHeight。
- 创建一个 ImageOptionsBase 的实例,并将其 VectorRasterizationOptions 属性设置为前一步创建的 CadRasterizationOptions 实例。
- 调用 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 格式,如 DWG 和 DXF,因此本文中分享的信息对这两种 CAD 格式均有效。
最有用的 CadRasterizationOptions 类属性包括:
属性 | 默认值 | 是否必需 | 描述 |
---|---|---|---|
PageWidth | 0 | 是 | 指定页面宽度。 |
PageHeight | 0 | 是 | 指定页面高度 |
ScaleMethod | ScaleType.ShrinkToFit | 否 | 指定绘图是否应自动缩放。默认值自动缩小图像以适应画布大小。切换到 GrowToFit 模式,或使用 None 设置以禁用自动缩放。 |
BackgroundColor | Color.White | 否 | 指定输出图像的背景颜色。 |
DrawType | CadDrawTypeMode.UseDrawColor | 否 | 指定实体的着色模式。使用 UseObjectColor 选项来使用其原生颜色绘制实体,或使用 UseDrawColor 选项来覆盖原生颜色。 |
DrawColor | Color.Black | 否 | 指定被覆盖实体的颜色(仅当 DrawType 设置为 UseDrawColor 属性值时)。 |
AutomaticLayoutsScaling | False | 否 | 指定是否必须执行自动布局缩放,以匹配模型布局。 |
设置画布大小和模式
从 CAD 导出到 PDF 或 CAD 导出到栅格图像格式并不是一项简单的任务。由于生成的 PDF 或图像需要定义画布大小,因此我们需要显式指定 PDF 页面以正确呈现图纸的输出尺寸。明确设置 CadRasterizationOptions.PageWidth 和 CadRasterizationOptions.PageHeight 属性,否则您可能会遇到 ImageSaveException。
此外,您可以指定尺寸缩放选项。缩放选项由 CadRasterizationOptions.ScaleMethod 属性设置。使用此选项根据 CadRasterizationOptions.PageWidth 和 CadRasterizationOptions.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.BackgroundColor 和 CadRasterizationOptions.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 属性协作的工作原理。
- 如果 ScaleMethod 设置为 ScaleType.ShrinkToFit 或 ScaleType.GrowToFit,同时 AutomaticLayoutsScaling 设置为 false,则所有布局(包括模型)将根据第一个选项处理。
- 如果 ScaleMethod 设置为 ScaleType.ShrinkToFit 或 ScaleType.GrowToFit,同时 AutomaticLayoutsScaling 设置为 true,则将根据其大小处理所有布局(模型除外),而模型将根据第一个选项处理。
- 如果 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 个简单步骤实现相同的目标。
- 使用工厂方法 load 将 CAD 文件加载到 Image 的实例中。
- 创建一个 CadRasterizationOptions 的实例,并设置其必需属性,如 PageWidth 和 PageHeight。
- 使用 CadRasterizationOptions.Layouts 属性指定所需的布局名称。
- 创建一个 ImageOptionsBase 的实例,并将其 VectorRasterizationOptions 属性设置为前一步创建的 CadRasterizationOptions 实例。
- 调用 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 渲染过程的跟踪可以检测到以下可能的问题。
- 缺少或损坏的头信息。
- 缺少布局信息。
- 缺少块实体。
- 缺少尺寸样式。
- 缺少样式。
转换 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 个简单步骤实现。
- 使用工厂方法 load 将 CAD 文件加载到 Image 实例中。
- 创建一个 CadRasterizationOptions 的实例,并设置其必需属性,如 PageWidth 和 PageHeight。
- 使用 CadRasterizationOptions.Layers.add 方法添加所需的图层名称。
- 创建一个 ImageOptionsBase 的实例,并将其 VectorRasterizationOptions 属性设置为前一步创建的 CadRasterizationOptions 实例。
- 调用 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 个简单步骤实现。
- 使用工厂方法 Load 将 DWF CAD 文件加载到 Image 实例中。
- 创建一个 CadRasterizationOptions 的实例,并设置其必需属性,如 PageWidth 和 PageHeight。
- 使用 CadRasterizationOptions.Layers.Add 方法添加所需的图层名称。
- 创建一个 ImageOptionsBase 的实例,并将其 VectorRasterizationOptions 属性设置为前一步创建的 CadRasterizationOptions 实例。
- 调用 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); | |