Conversión de dibujos CAD a formatos PDF e imagen de ráster

Conversión de dibujos CAD a formatos de imagen de ráster

Aspose.CAD para Java es capaz de convertir formatos de dibujo CAD como DXF y DWG a los formatos de imagen de ráster soportados como PNG, BMP, TIFF, JPEG y GIF. La API de Aspose.CAD para Java ha expuesto medios eficientes y fáciles de usar para lograr este objetivo. Puede convertir cualquier formato de dibujo CAD soportado a formatos de imagen de ráster utilizando los simples pasos que se detallan a continuación.

  1. Cargue el archivo CAD en una instancia de Image.
  2. Cree una instancia de CadRasterizationOptions y configure sus propiedades obligatorias como PageWidth y PageHeight.
  3. Cree una instancia de ImageOptionsBase y configure su propiedad VectorRasterizationOptions a la instancia de CadRasterizationOptions creada en el paso anterior.
  4. Llame a Image.save pasando la ruta del archivo (o un objeto de MemoryStream) así como la instancia de ImageOptionsBase creada en el paso anterior.

Aquí está el código fuente completo.

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);

Por defecto, la API renderiza solo el diseño “Modelo”. Sin embargo, también puede especificar los diseños de su elección al convertir dibujos CAD a formatos de imagen.

Personalizando la conversión de CAD

Los procedimientos de conversión de CAD a PDF y de CAD a imagen de ráster son altamente configurables porque la clase CadRasterizationOptions ha sido implementada de tal manera que proporciona muchas características opcionales que, al ser configuradas, pueden anular el proceso de renderización según las necesidades de la aplicación.

Clase CadRasterizationOptions

La clase CadRasterizationOptions es común para todos los formatos CAD soportados como DWG y DXF, por lo tanto, la información compartida en este artículo es válida para ambos formatos CAD mencionados.

Las propiedades más útiles de la clase CadRasterizationOptions son:

PropiedadValor por defectoRequeridoDescripción
PageWidth0Especifica el ancho de la página.
PageHeight0Especifica la altura de la página.
ScaleMethodScaleType.ShrinkToFitNoEspecifica si el dibujo debe ser escalado automáticamente. El valor por defecto reduce automáticamente la imagen para ajustarla al tamaño del lienzo. Cambie al modo GrowToFit, o use la configuración None para desactivar el escalado automático.
BackgroundColorColor.WhiteNoEspecifica el color de fondo de la imagen de salida.
DrawTypeCadDrawTypeMode.UseDrawColorNoEspecifica el modo de coloración de las entidades. Especifique la opción UseObjectColor para dibujar entidades utilizando su color nativo, o la opción UseDrawColor para anular los colores nativos.
DrawColorColor.BlackNoEspecifica el color anulado de la entidad (solo si DrawType está configurado al valor de propiedad UseDrawColor).
AutomaticLayoutsScalingFalsoNoEspecifica si se debe realizar un escalado automático del diseño para coincidir con el diseño Modelo.

Estableciendo el tamaño y modo del lienzo

Exportar de CAD a PDF o de CAD a formatos de imagen de ráster no es una tarea trivial. Dado que el PDF o imagen resultante requiere que se defina el tamaño del lienzo, necesitamos especificar las dimensiones de salida para que la página PDF renderice el dibujo correctamente. Establezca explícitamente las propiedades CadRasterizationOptions.PageWidth y CadRasterizationOptions.PageHeight, o puede obtener una ImageSaveException.

Además, puede especificar opciones de escala de dimensión. Las opciones de escalado se establecen mediante la propiedad CadRasterizationOptions.ScaleMethod. Use esta opción para ajustar automáticamente las dimensiones de la imagen de acuerdo con los valores de CadRasterizationOptions.PageWidth y CadRasterizationOptions.PageHeight. Por defecto, CadRasterizationOptions.ScaleMethod está configurado en modo ScaleType.ShrinkToFit. Esta propiedad define el siguiente comportamiento:

  • Si las dimensiones del dibujo CAD son mayores que el tamaño del lienzo resultante, entonces las dimensiones del dibujo se reducen para ajustarse al lienzo resultante mientras se preserva la relación de aspecto.
  • Si las dimensiones del dibujo CAD son menores que el tamaño del lienzo resultante, establezca la propiedad CadRasterizationOptions.ScaleMethod como ScaleType.GrowToFit para aumentar el tamaño del dibujo y ajustarlo al lienzo PDF manteniendo la relación de aspecto.
  • O desactive el escalado automático con la opción ScaleType.None.

El siguiente fragmento de código muestra la opción de escalado automático en uso.

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);

Estableciendo los colores de fondo y de dibujo

Por defecto, la paleta de colores para el lienzo resultante está configurada al esquema común del documento. Eso significa que todas las entidades dentro del dibujo CAD se dibujan con un bolígrafo de color negro sobre un fondo blanco sólido. Estos ajustes pueden cambiarse con las propiedades CadRasterizationOptions.BackgroundColor y CadRasterizationOptions.DrawColor. Cambiar la propiedad CadRasterizationOptions.DrawColor también requiere establecer la propiedad CadRasterizationOptions.DrawType para hacer uso del color de dibujo que se utilizará. La propiedad CadRasterizationOptions.DrawType controla si las entidades CAD preservan sus colores o se convierten a colores personalizados. Para preservar los colores de entidad, especifique CadRasterizationOptions.DrawType como CadDrawTypeMode.UseObjectColor, de lo contrario, especifique el valor CadDrawTypeMode.UseDrawColor.

El siguiente fragmento de código muestra cómo usar diferentes propiedades de color.

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);

Estableciendo el escalado automático del diseño

La mayoría de los dibujos CAD tienen más de un diseño almacenado en un solo archivo, y cada diseño podría tener dimensiones diferentes. Al renderizar dicho dibujos CAD a PDF, cada página del PDF podría tener diferentes escalados de acuerdo con el tamaño del diseño. Para hacer que el renderizado sea homogéneo, las API de Aspose.CAD han expuesto la propiedad CadRasterizationOptions.AutomaticLayoutsScaling. Su valor por defecto es falso, pero cuando es verdadero, la API intentará buscar una escala correspondiente para cada diseño separado y dibujarlos de manera correspondiente realizando una operación de redimensionamiento automático de acuerdo con el tamaño de la página.

Así funciona la propiedad CadRasterizationOptions.AutomaticLayoutsScaling en colaboración con la propiedad CadRasterizationOptions.ScaleMethod.

  1. Si ScaleMethod está configurado como ScaleType.ShrinkToFit o ScaleType.GrowToFit con AutomaticLayoutsScaling configurado como falso, entonces todos los diseños (incluido el Modelo) se procesarán de acuerdo con la primera opción.
  2. Si ScaleMethod está configurado como ScaleType.ShrinkToFit o ScaleType.GrowToFit con AutomaticLayoutsScaling configurado como verdadero, entonces todos los diseños (excepto el Modelo) se procesarán de acuerdo con su tamaño, mientras que el Modelo se procesará de acuerdo con la primera opción.
  3. Si ScaleMethod está configurado como ScaleType.None con AutomaticLayoutsScaling configurado como verdadero o falso, entonces no se realizará ningún escalado.

El siguiente fragmento de código muestra cómo establecer el escalado automático del diseño para la conversión de CAD a 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);

Conversión de diseños CAD a formatos de imagen de ráster

Aspose.CAD para Java API es capaz de convertir los diseños CAD de formatos soportados como DXF y DWG a las imágenes de ráster como PNG, BMP, TIFF, JPEG y GIF. La API también proporciona soporte para renderizar los diseños específicos de un dibujo CAD a diferentes capas PSD.  Aspose.CAD para Java API ha expuesto medios eficientes y fáciles de usar para especificar la lista de diseños CAD requeridos y renderizarlos a formatos de imagen de ráster. Aquí está cómo puede lograr el mismo en 5 simples pasos como se detalla a continuación.

  1. Cargue el archivo CAD en una instancia de Image usando el método de fábrica load.
  2. Cree una instancia de CadRasterizationOptions y establezca sus propiedades obligatorias como PageWidth y PageHeight.
  3. Especifique el/los nombre/s de diseño deseado/s utilizando la propiedad CadRasterizationOptions.Layouts.
  4. Cree una instancia de ImageOptionsBase y establezca su propiedad VectorRasterizationOptions a la instancia de CadRasterizationOptions creada en el paso anterior.
  5. Llame a Image.Save pasando la ruta del archivo (o un objeto de MemoryStream) así como la instancia de ImageOptionsBase creada en el paso anterior.

Aquí está el código fuente completo.

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);

 

Habilitando el seguimiento del proceso de renderización CAD

Aspose.CAD ha introducido una serie de clases y campos de enumeración de soporte para ayudar con el seguimiento del proceso de renderización CAD. Con estos cambios en su lugar, la conversión de CAD a PDF ahora se puede lograr de la siguiente manera habilitando el seguimiento.

// 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++;
}
}
}

El seguimiento del proceso de renderización CAD puede detectar los siguientes problemas posibles.

  1. Información de encabezado faltante o dañada.
  2. Información de diseño faltante.
  3. Entidades de bloque faltantes.
  4. Estilos de dimensión faltantes.
  5. Estilos faltantes.

Sustitución de fuentes al convertir dibujos CAD

Es bastante posible que un dibujo CAD particular use alguna fuente específica que no esté disponible en la máquina donde se está realizando la conversión de CAD a PDF o CAD a imagen de ráster. En tales situaciones, la API de Aspose.CAD generará una excepción apropiada para resaltar la falta de fuente(s) y detener el proceso de conversión porque la API requiere estas fuentes para renderizar correctamente el contenido en el PDF y/o imágenes resultantes. La API de Aspose.CAD proporciona una manera fácil de usar el mecanismo para sustituir la(s) fuente(s) requeridas con la(s) fuente(s) disponible(s). La propiedad CadImage.Styles devuelve una instancia de CadStylesDictionary que a su vez contiene el CadStyleTableObject para cada estilo en el dibujo CAD, mientras que el CadStyleTableObject.PrimaryFontName puede ser utilizado para especificar el nombre de la fuente disponible.

El siguiente fragmento de código demuestra el uso de Aspose.CAD para Java API para cambiar la fuente de todos los estilos en un dibujo 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");
}

También es posible cambiar la fuente de solo un estilo particular accediendo a él a través del nombre del estilo. El siguiente fragmento de código demuestra el uso de este enfoque.

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");

Conversión de capas CAD a formatos de imagen de ráster

Aspose.CAD para Java API ha expuesto un medio eficiente y fácil de usar para especificar el nombre de la capa CAD requerida y renderizarla a formatos de imagen de ráster. Aquí está cómo puede lograr lo mismo en 5 simples pasos como se detalla a continuación.

  1. Cargue el archivo CAD en una instancia de Image usando el método de fábrica load.
  2. Cree una instancia de CadRasterizationOptions y establezca sus propiedades obligatorias como PageWidth y PageHeight.
  3. Agregue el nombre de capa deseado utilizando el método CadRasterizationOptions.Layers.add.
  4. Cree una instancia de ImageOptionsBase y establezca su propiedad VectorRasterizationOptions a la instancia de CadRasterizationOptions creada en el paso anterior.
  5. Llame al método Image.save pasando la ruta del archivo (o un objeto de MemoryStream) así como la instancia de ImageOptionsBase creada en el paso anterior.

Aquí está el código fuente completo.

// 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);

Conversión de todas las capas CAD a imágenes separadas

Puede obtener todas las capas de un dibujo CAD utilizando CadImage.Layers y renderizar cada capa a una imagen separada como se demuestra a continuación.

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);
}

Conversión de capas CAD DWF a formatos de imagen de ráster

Aspose.CAD para Java API ha expuesto un medio eficiente y fácil de usar para especificar el nombre de la capa CAD requerida y renderizarla a formatos de imagen de ráster. Aquí está cómo puede lograr lo mismo en 5 simples pasos como se detalla a continuación.

  1. Cargue el archivo DWF CAD en una instancia de Image usando el método de fábrica Load.
  2. Cree una instancia de CadRasterizationOptions y establezca sus propiedades obligatorias como PageWidth y PageHeight.
  3. Agregue el nombre de capa deseado utilizando el método CadRasterizationOptions.Layers.Add.
  4. Cree una instancia de ImageOptionsBase y establezca su propiedad VectorRasterizationOptions a la instancia de CadRasterizationOptions creada en el paso anterior.
  5. Llame al método Image.Save pasando la ruta del archivo (o un objeto de MemoryStream) así como la instancia de ImageOptionsBase creada en el paso anterior.

Aquí está el código fuente completo.

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);