Wyszukaj tekst w DWG C#

Pliki rysunków DWG zawierają dane projektowe 2D lub 3D. Jest szeroko stosowany przez projektantów, inżynierów i architektów. W niektórych sytuacjach może być konieczne znalezienie tekstu w pliku DWG. W związku z tym w tym artykule omówiono programowe wyszukiwanie tekstu w pliku DWG w języku C#.

Znajdź tekst w pliku rysunku DWG — konfiguracja API C#

Aspose.CAD for .NET obsługuje tworzenie lub manipulowanie różnymi rysunkami CAD, takimi jak DWG, DXF i kilka innych formatów plików. Możesz łatwo skonfigurować API, pobierając pliki DLL z sekcji Downloads lub uruchamiając następującą komendę instalacyjną NuGet:

PM> Install-Package Aspose.CAD

Jak wyszukiwać tekst w pliku DWG za pomocą C#

Poniższe kroki pokazują, jak wyszukiwać tekst w pliku DWG przy użyciu języka C#:

  1. Załaduj istniejący plik DWG.
  2. Wyszukiwanie tekstu poprzez iterację elementów CadText.
  3. Wyszukaj tekst w określonym układzie.
  4. Wyeksportuj plik do formatu PDF.

Wyszukaj tekst w pliku rysunku DWG w języku C#

Aby wyszukać tekst w pliku DWG za pomocą języka C#, wykonaj poniższe czynności:

  1. Załaduj istniejący plik DWG z klasą CadImage.
  2. Wyszukiwanie tekstu poprzez iterację elementów CadText.
  3. Wyszukaj tekst w określonym układzie.
  4. Wyeksportuj plik do formatu PDF.

Poniższy przykładowy kod pokazuje, jak wyszukiwać tekst w pliku DWG przy użyciu języka C#:

// Załaduj istniejący plik DWG jako CadImage.
using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath))
{
    // Wyszukaj tekst w pliku 
    foreach (CadBaseEntity entity in cadImage.Entities)
    {
        // Przechodzimy przez encje CadText, ale niektóre inne encje mogą również zawierać tekst, np. CadMText i inne
        IterateCADNodes(entity);
    }

    // Wyszukaj tekst w określonym układzie, uzyskaj wszystkie nazwy układów i połącz każdy układ z odpowiednim blokiem z elementami
    CadLayoutDictionary layouts = cadImage.Layouts;
    string[] layoutNames = new string[layouts.Count];
    int i = 0;
    foreach (CadLayout layout in layouts.Values)
    {
        layoutNames[i++] = layout.LayoutName;
        System.Console.WriteLine("Layout " + layout.LayoutName + " is found");

        // Znajdź blok, mający zastosowanie tylko do plików DWG
        CadBlockTableObject blockTableObjectReference = null;
        foreach (CadBlockTableObject tableObject in cadImage.BlocksTables)
        {
            if (string.Equals(tableObject.HardPointerToLayout, layout.ObjectHandle))
            {
                blockTableObjectReference = tableObject;
                break;
            }
        }

        if (blockTableObjectReference != null)
        {
            // Kolekcja cadBlockEntity.Entities zawiera informacje o wszystkich obiektach na danym układzie
            CadBlockEntity cadBlockEntity = cadImage.BlockEntities[blockTableObjectReference.BlockName];
        }
    }

    // Eksportuj do PDF
    CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
    rasterizationOptions.PageWidth = 1600;
    rasterizationOptions.PageHeight = 1600;
    rasterizationOptions.AutomaticLayoutsScaling = true;

    // Jeśli kolekcja cadBlockEntity dla wybranego layoutu lub kolekcja entityOnLayouts według BlockTableRecordHandle layoutu (dla dxf) jest pusta
    rasterizationOptions.Layouts = new[] { "Layout1" };

    ImageOptions.PdfOptions pdfOptions = new PdfOptions();

    pdfOptions.VectorRasterizationOptions = rasterizationOptions;
    cadImage.Save("SearchText_CAD.pdf", pdfOptions);
}





public static void SearchTextInDWGAutoCADFile()
{
    // Ścieżka do katalogu dokumentów.            
    string sourceFilePath = "search.dwg";
    // Załaduj istniejący plik DWG jako CadImage. 
    CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath);

    // Wyszukaj tekst w sekcji podmiotów 
    foreach (var entity in cadImage.Entities)
    {
        IterateCADNodes(entity);
    }

    // Wyszukaj tekst w sekcji bloku 
    foreach (CadBlockEntity blockEntity in cadImage.BlockEntities.Values)
    {
        foreach (var entity in blockEntity.Entities)
        {
            IterateCADNodes(entity);
        }
    }
}



private static void IterateCADNodes(CadBaseEntity obj)
{
    switch (obj.TypeName)
    {
        case CadEntityTypeName.TEXT:
            CadText childObjectText = (CadText)obj;

            Console.WriteLine(childObjectText.DefaultValue);

            break;

        case CadEntityTypeName.MTEXT:
            CadMText childObjectMText = (CadMText)obj;

            Console.WriteLine(childObjectMText.Text);

            break;

        case CadEntityTypeName.INSERT:
            CadInsertObject childInsertObject = (CadInsertObject)obj;

            foreach (var tempobj in childInsertObject.ChildObjects)
            {
                IterateCADNodes(tempobj);
            }
            break;

        case CadEntityTypeName.ATTDEF:
            CadAttDef attDef = (CadAttDef)obj;

            Console.WriteLine(attDef.DefaultString);
            break;

        case CadEntityTypeName.ATTRIB:
            CadAttrib attAttrib = (CadAttrib)obj;

            Console.WriteLine(attAttrib.DefaultText);
            break;
    }
}

Uzyskaj bezpłatną tymczasową licencję

Możesz przetestować funkcje interfejsu API bez żadnych ograniczeń ewaluacyjnych, prosząc o bezpłatną licencję tymczasową.

Wniosek

W tym artykule nauczyłeś się, jak programowo wyszukiwać tekst w pliku DWG w języku C#. Co więcej, możesz zapoznać się z różnymi funkcjami API, przeglądając sekcję dokumentacja. W razie jakichkolwiek wątpliwości napisz do nas na forum.

Zobacz też

Przeglądarka plików DWG oparta na ASP.NET