Konwersja rysunków CAD do formatów PDF i obrazów rastrowych

Konwersja rysunków CAD do formatów obrazów rastrowych

Aspose.CAD dla Javy jest w stanie konwertować formaty rysunków CAD, takie jak DXF i DWG do obsługiwanych formatów obrazów rastrowych, takich jak PNG, BMP, TIFF, JPEG i GIF. API Aspose.CAD dla Javy oferuje wydajne i łatwe w użyciu środki do osiągnięcia tego celu. Można konwertować dowolny obsługiwany format rysunku CAD do formatów obrazów rastrowych, używając prostych kroków, jak opisano poniżej.

  1. Załaduj plik CAD do instancji Image.
  2. Utwórz instancję CadRasterizationOptions i ustaw jej obowiązkowe właściwości, takie jak PageWidth i PageHeight.
  3. Utwórz instancję ImageOptionsBase i ustaw jej właściwość VectorRasterizationOptions na instancję CadRasterizationOptions utworzoną w poprzednim kroku.
  4. Wywołaj Image.save, przekazując ścieżkę pliku (lub obiekt MemoryStream) oraz instancję ImageOptionsBase utworzoną w poprzednim kroku.

Oto kompletny kod źródłowy.

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

Domyślnie API renderuje tylko układ “Model”. Możesz jednak również określić układy, które wybierzesz podczas konwersji rysunków CAD do formatów obrazów.

Dostosowywanie konwersji CAD

Procedury konwersji CAD do PDF i konwersji CAD do obrazów rastrowych są wysoce konfigurowalne, ponieważ klasa CadRasterizationOptions została zaimplementowana w taki sposób, że oferuje wiele opcjonalnych funkcji, które po ustawieniu mogą nadpisywać proces renderowania zgodnie z potrzebami aplikacji.

Klasa CadRasterizationOptions

Klasa CadRasterizationOptions jest wspólna dla wszystkich obsługiwanych formatów CAD, takich jak DWG i DXF, dlatego informacje zawarte w tym artykule są ważne dla obu wymienionych formatów CAD.

Najbardziej przydatne właściwości klasy CadRasterizationOptions to:

WłaściwośćWartość domyślnaWymaganaOpis
PageWidth0TakOkreśla szerokość strony.
PageHeight0TakOkreśla wysokość strony
ScaleMethodScaleType.ShrinkToFitNieOkreśla, czy rysunek powinien być automatycznie skalowany. Wartość domyślna automatycznie zmniejsza obraz, aby dopasować rozmiar płótna. Przełącz na tryb GrowToFit lub użyj ustawienia None, aby wyłączyć automatyczne skalowanie.
BackgroundColorColor.WhiteNieOkreśla kolor tła obrazu wyjściowego.
DrawTypeCadDrawTypeMode.UseDrawColorNieOkreśla sposób kolorowania encji. Wybierz opcję UseObjectColor, aby rysować encje przy użyciu ich native’owego koloru, lub opcję UseDrawColor, aby nadpisać kolory native’owe.
DrawColorColor.BlackNieOkreśla nadpisany kolor encji (tylko jeśli DrawType jest ustawione na wartość właściwości UseDrawColor).
AutomaticLayoutsScalingFałszNieOkreśla, czy należy wykonać automatyczne skalowanie układu, aby dopasować go do układu Model.

Ustawianie rozmiaru i trybu płótna

Eksport z CAD do PDF lub z CAD do formatów obrazów rastrowych nie jest trywialnym zadaniem. Ponieważ powstały PDF lub obraz wymaga zdefiniowania rozmiaru płótna, musimy określić wymiary wyjściowe dla strony PDF, aby poprawnie wyświetlić rysunek. Ustaw właściwości CadRasterizationOptions.PageWidth i CadRasterizationOptions.PageHeight w sposób jawny, lub możesz napotkać ImageSaveException.

Dodatkowo możesz określić opcje skali wymiarów. Opcje skalowania są ustawiane przez właściwość CadRasterizationOptions.ScaleMethod. Użyj tej opcji, aby automatycznie dostosować wymiary obrazu zgodnie z wartościami CadRasterizationOptions.PageWidth i CadRasterizationOptions.PageHeight. Domyślnie CadRasterizationOptions.ScaleMethod jest ustawione na tryb ScaleType.ShrinkToFit. Ta właściwość definiuje następujące zachowanie:

  • Jeśli wymiary rysunku CAD są większe niż rozmiar płótna, to wymiary rysunku są redukowane, aby dopasować się do powstałego płótna, zachowując proporcje.
  • Jeśli wymiary rysunku CAD są mniejsze niż rozmiar płótna, ustaw właściwość CadRasterizationOptions.ScaleMethod na ScaleType.GrowToFit, aby zwiększyć rozmiar rysunku, aby dopasować się do płótna PDF, zachowując proporcje.
  • Lub wyłącz automatyczne skalowanie za pomocą opcji ScaleType.None.

Poniższy przykład kodu pokazuje, jak wykorzystać opcję automatycznego skalowania.

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

Ustawianie kolorów tła i rysunku

Domyślnie paleta kolorów dla powstałego płótna jest ustawiona na wspólny schemat dokumentu. Oznacza to, że wszystkie encje w rysunku CAD są rysowane czarnym kolorem na jednolitym białym tle. Te ustawienia można zmienić za pomocą właściwości CadRasterizationOptions.BackgroundColor i CadRasterizationOptions.DrawColor. Zmiana właściwości CadRasterizationOptions.DrawColor wymaga także ustawienia właściwości CadRasterizationOptions.DrawType, aby skorzystać z koloru rysowania. Właściwość CadRasterizationOptions.DrawType kontroluje, czy encje CAD zachowują swoje kolory, czy są konwertowane na kolory niestandardowe. Aby zachować kolory encji, określ CadRasterizationOptions.DrawType jako CadDrawTypeMode.UseObjectColor, w przeciwnym razie wybierz wartość CadDrawTypeMode.UseDrawColor.

Poniższy przykład kodu pokazuje, jak używać różnych właściwości kolorów.

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

Ustawianie automatycznego skalowania układu

Większość rysunków CAD ma więcej niż jeden układ zapisany w pojedynczym pliku, a każdy układ może mieć różne wymiary. Podczas renderowania takich rysunków CAD do PDF, każda strona PDF może mieć różne skalowanie zgodnie z rozmiarami układów. Aby uczynić renderowanie jednorodnym, API Aspose.CAD udostępniło właściwość CadRasterizationOptions.AutomaticLayoutsScaling. Jej domyślna wartość to false, ale kiedy jest ustawiona na true, API spróbuje wyszukać odpowiednią skalę dla każdego osobnego układu i narysować je w odpowiedni sposób wykonując automatyczną operację zmiany rozmiaru zgodnie z rozmiarem strony.

Oto jak właściwość CadRasterizationOptions.AutomaticLayoutsScaling działa w połączeniu z właściwością CadRasterizationOptions.ScaleMethod.

  1. Jeśli ScaleMethod jest ustawione na ScaleType.ShrinkToFit lub ScaleType.GrowToFit przy AutomaticLayoutsScaling ustawionym na false, wszystkie układy (w tym Model) będą przetwarzane zgodnie z pierwszą opcją.
  2. Jeśli ScaleMethod jest ustawione na ScaleType.ShrinkToFit lub ScaleType.GrowToFit przy AutomaticLayoutsScaling ustawionym na true, wszystkie układy (z wyjątkiem Modelu) będą przetwarzane zgodnie z ich rozmiarami, podczas gdy Model będzie przetwarzany zgodnie z pierwszą opcją.
  3. Jeśli ScaleMethod jest ustawione na ScaleType.None przy AutomaticLayoutsScaling ustawionym na true lub false, to żadne skalowanie nie będzie wykonywane.

Poniższy przykład kodu pokazuje, jak ustawić automatyczne skalowanie układu dla konwersji CAD do 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);

Konwersja układów CAD do formatów obrazów rastrowych

API Aspose.CAD dla Javy jest w stanie konwertować układy CAD obsługiwanych formatów, takich jak DXF i DWG, do obrazów rastrowych, takich jak PNG, BMP, TIFF, JPEG i GIF. API także zapewnia wsparcie do renderowania konkretnych układów rysunku CAD do różnych warstw PSD.  API Aspose.CAD dla Javy udostępniło wydajne i łatwe w użyciu środki do określenia listy wymaganych układów CAD i renderowania ich do formatów obrazów rastrowych. Oto jak możesz to osiągnąć w 5 prostych krokach, jak wymieniono poniżej.

  1. Załaduj plik CAD do instancji Image używając metody fabrycznej load.
  2. Utwórz instancję CadRasterizationOptions i ustaw jej obowiązkowe właściwości, takie jak PageWidth i PageHeight.
  3. Określ żądane nazwy układu/y przy użyciu właściwości CadRasterizationOptions.Layouts.
  4. Utwórz instancję ImageOptionsBase i ustaw jej właściwość VectorRasterizationOptions na instancję CadRasterizationOptions utworzoną w poprzednim kroku.
  5. Wywołaj Image.Save, przekazując ścieżkę pliku (lub obiekt MemoryStream) oraz instancję ImageOptionsBase utworzoną w poprzednim kroku.

Oto kompletny kod źródłowy.

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

 

Włączanie śledzenia procesu renderowania CAD

Aspose.CAD wprowadziło szereg klas i wspierających pól wyliczeniowych, aby pomóc w śledzeniu procesu renderowania CAD. Dzięki tym zmianom, konwersję CAD do PDF można teraz osiągnąć w następujący sposób, włączając śledzenie.

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

Śledzenie procesu renderowania CAD może zidentyfikować następujące potencjalne problemy.

  1. Brakujące lub uszkodzone informacje nagłówkowe.
  2. Brakujące informacje o układzie.
  3. Brakujące encje blokowe.
  4. Brakujące style wymiarów.
  5. Brakujące style.

Zastępowanie czcionek podczas konwersji rysunków CAD

Jest całkiem możliwe, że dany rysunek CAD używa konkretnej czcionki, która nie jest dostępna na maszynie, na której odbywa się konwersja CAD do PDF lub CAD do obrazów rastrowych. W takich sytuacjach API Aspose.CAD wyzwoli odpowiedni wyjątek, aby podkreślić brakujące czcionki i przerwać proces konwersji, ponieważ API wymaga tych czcionek, aby poprawnie renderować zawartość na powstałym PDF i/lub obrazach. API Aspose.CAD zapewnia łatwy sposób wykorzystania mechanizmu do zastępowania wymaganych czcionek czcionkami dostępnymi. Właściwość CadImage.Styles zwraca instancję CadStylesDictionary, która z kolei zawiera CadStyleTableObject dla każdego stylu w rysunku CAD, podczas gdy CadStyleTableObject.PrimaryFontName można użyć do określenia dostępnej nazwy czcionki.

Poniższy fragment kodu demonstruje użycie API Aspose.CAD dla Javy do zmiany czcionki wszystkich stylów w rysunku 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");
}

Możliwe jest także zmienienie czcionki tylko jednego konkretnego stylu, uzyskując do niego dostęp za pośrednictwem nazwy stylu. Poniższy fragment kodu demonstruje zastosowanie tego podejścia.

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

Konwersja warstw CAD do formatów obrazów rastrowych

API Aspose.CAD dla Javy udostępniło wydajne i łatwe w użyciu środki do określenia nazwy wymaganej warstwy CAD i renderowania jej do formatów obrazów rastrowych. Oto jak możesz to osiągnąć w 5 prostych krokach, jak wymieniono poniżej.

  1. Załaduj plik CAD do instancji Image używając metody fabrycznej load.
  2. Utwórz instancję CadRasterizationOptions i ustaw jej obowiązkowe właściwości, takie jak PageWidth i PageHeight.
  3. Dodaj żądane nazwy warstw przy użyciu metody CadRasterizationOptions.Layers.add.
  4. Utwórz instancję ImageOptionsBase i ustaw jej właściwość VectorRasterizationOptions na instancję CadRasterizationOptions utworzoną w poprzednim kroku.
  5. Wywołaj metodę Image.save, przekazując ścieżkę pliku (lub obiekt MemoryStream) oraz instancję ImageOptionsBase utworzoną w poprzednim kroku.

Oto kompletny kod źródłowy.

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

Konwersja wszystkich warstw CAD na oddzielne obrazy

Możesz uzyskać wszystkie warstwy z rysunku CAD, używając CadImage.Layers i renderować każdą warstwę na oddzielnym obrazie, jak pokazano poniżej.

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

Konwersja warstw CAD DWF do formatów obrazów rastrowych

API Aspose.CAD dla Javy udostępniło wydajne i łatwe w użyciu środki do określenia nazwy wymaganej warstwy CAD i renderowania jej do formatów obrazów rastrowych. Oto jak możesz to osiągnąć w 5 prostych krokach, jak wymieniono poniżej.

  1. Załaduj plik CAD DWF do instancji Image używając metody fabrycznej Load.
  2. Utwórz instancję CadRasterizationOptions i ustaw jej obowiązkowe właściwości, takie jak PageWidth i PageHeight.
  3. Dodaj żądaną nazwę warstwy przy użyciu metody CadRasterizationOptions.Layers.Add.
  4. Utwórz instancję ImageOptionsBase i ustaw jej właściwość VectorRasterizationOptions na instancję CadRasterizationOptions utworzoną w poprzednim kroku.
  5. Wywołaj metodę Image.Save, przekazując ścieżkę pliku (lub obiekt MemoryStream) oraz instancję ImageOptionsBase utworzoną w poprzednim kroku.

Oto kompletny kod źródłowy.

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