Преобразование чертежей CAD в форматы PDF и растровых изображений
Aspose.CAD для Java непосредственно записывает информацию об API и номере версии в выходные документы. Например, при рендеринге документа в PDF Aspose.CAD для Java заполняет поле приложения значением ‘Aspose.CAD’ и поле “PDF Producer” значением, например, ‘Aspose.CAD v 17.9’.
Обратите внимание, что вы не можете указать Aspose.CAD для Java изменить или удалить эту информацию из выходных документов.
Преобразование чертежей CAD в форматы растровых изображений
Aspose.CAD для Java может преобразовывать форматы чертежей CAD, такие как DXF и DWG, в поддерживаемые форматы растровых изображений, такие как PNG, BMP, TIFF, JPEG и GIF. API Aspose.CAD для Java предложил эффективные и простые в использовании средства для достижения этой цели. Вы можете преобразовать любой поддерживаемый формат чертежа 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 может иметь различное масштабирование в зависимости от размера макета. Чтобы сделать рендеринг однородным, API Aspose.CAD предложили свойство 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 в форматы растровых изображений
API Aspose.CAD для Java способен преобразовывать макеты CAD поддерживаемых форматов, таких как DXF и DWG, в растровые изображения, такие как PNG, BMP, TIFF, JPEG и GIF. API также поддерживает отображение конкретных макетов чертежа CAD на разные слои PSD. API Aspose.CAD для Java предложил эффективные и простые в использовании средства для указания списка необходимых макетов CAD и их рендеринга в форматы растровых изображений. Вот как вы можете достичь этого за 5 простых шагов, перечисленных ниже.
- Загрузите файл CAD в экземпляр Image с помощью фабричного метода load.
- Создайте экземпляр 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 в растровое изображение. В таких ситуациях 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 простых шагов, перечисленных ниже.
- Загрузите файл CAD в экземпляр Image с помощью фабричного метода load.
- Создайте экземпляр 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 в отдельные изображения
Вы можете получить все слои из чертежа 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 простых шагов, перечисленных ниже.
- Загрузите файл DWF CAD в экземпляр Image с помощью фабричного метода Load.
- Создайте экземпляр 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); | |