Преобразование чертежей CAD в форматы PDF и растровых изображений

Преобразование чертежей CAD в форматы растровых изображений

Aspose.CAD для Java может преобразовывать форматы чертежей CAD, такие как DXF и DWG, в поддерживаемые форматы растровых изображений, такие как PNG, BMP, TIFF, JPEG и GIF. API Aspose.CAD для Java предложил эффективные и простые в использовании средства для достижения этой цели. Вы можете преобразовать любой поддерживаемый формат чертежа CAD в форматы растровых изображений, следуя простым шагам, изложенным ниже.

  1. Загрузите файл CAD в экземпляр Image.
  2. Создайте экземпляр CadRasterizationOptions и установите его обязательные свойства, такие как PageWidth и PageHeight.
  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, таких как DWG и DXF, поэтому информация, представленная в этой статье, актуальна для обоих вышеупомянутых форматов 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.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 может иметь различное масштабирование в зависимости от размера макета. Чтобы сделать рендеринг однородным, API Aspose.CAD предложили свойство CadRasterizationOptions.AutomaticLayoutsScaling. Его значение по умолчанию — false, но когда оно равно true, API будет пытаться искать соответствующий масштаб для каждого отдельного макета и рисовать их соответствующим образом, выполняя автоматическое изменение размера в зависимости от размера страницы.

Вот как работает свойство CadRasterizationOptions.AutomaticLayoutsScaling в сотрудничестве с свойством CadRasterizationOptions.ScaleMethod.

  1. Если ScaleMethod установлен в ScaleType.ShrinkToFit или ScaleType.GrowToFit с AutomaticLayoutsScaling, установленным на false, то все макеты (включая модель) будут обрабатываться в соответствии с первым вариантом.
  2. Если ScaleMethod установлен в ScaleType.ShrinkToFit или ScaleType.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 в форматы растровых изображений

API Aspose.CAD для Java способен преобразовывать макеты CAD поддерживаемых форматов, таких как DXF и DWG, в растровые изображения, такие как PNG, BMP, TIFF, JPEG и GIF. API также поддерживает отображение конкретных макетов чертежа CAD на разные слои PSD. API Aspose.CAD для Java предложил эффективные и простые в использовании средства для указания списка необходимых макетов CAD и их рендеринга в форматы растровых изображений. Вот как вы можете достичь этого за 5 простых шагов, перечисленных ниже.

  1. Загрузите файл CAD в экземпляр Image с помощью фабричного метода load.
  2. Создайте экземпляр CadRasterizationOptions и установите его обязательные свойства, такие как PageWidth и PageHeight.
  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 в растровое изображение. В таких ситуациях API Aspose.CAD вызовет соответствующее исключение, чтобы выделить отсутствующий шрифт(ы) и остановить процесс преобразования, поскольку API требует, чтобы эти шрифты правильно отображали содержимое на итоговом PDF и/или изображениях. API Aspose.CAD предоставляет простой способ использования механизма замены необходимых шрифтов на доступные. Свойство CadImage.Styles возвращает экземпляр CadStylesDictionary, который, в свою очередь, содержит CadStyleTableObject для каждого стиля в чертеже CAD, тогда как CadStyleTableObject.PrimaryFontName можно использовать для указания доступного имени шрифта.

Следующий фрагмент кода демонстрирует использование Aspose.CAD для 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 в форматы растровых изображений

API Aspose.CAD для Java предложил эффективные и простые в использовании средства для указания имени необходимого слоя CAD и его рендеринга в форматы растровых изображений. Вот как вы можете достичь этого за 5 простых шагов, перечисленных ниже.

  1. Загрузите файл CAD в экземпляр Image с помощью фабричного метода load.
  2. Создайте экземпляр CadRasterizationOptions и установите его обязательные свойства, такие как PageWidth и PageHeight.
  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 в отдельные изображения

Вы можете получить все слои из чертежа CAD, используя CadImage.Layers, и отобразить каждый слой в отдельное изображение, как показано ниже.

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 в форматы растровых изображений

API Aspose.CAD для Java предложил эффективные и простые в использовании средства для указания имени необходимого слоя CAD и его рендеринга в форматы растровых изображений. Вот как вы можете достичь этого за 5 простых шагов, перечисленных ниже.

  1. Загрузите файл DWF CAD в экземпляр Image с помощью фабричного метода Load.
  2. Создайте экземпляр CadRasterizationOptions и установите его обязательные свойства, такие как PageWidth и PageHeight.
  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);