Поиск текста в DWG C#

Файлы чертежей DWG содержат данные 2D- или 3D-проектирования. Он широко используется дизайнерами, инженерами и архитекторами. В некоторых сценариях может потребоваться найти текст в файле DWG. Соответственно, в этой статье обсуждается программный поиск текста в файле DWG на языке C#.

Поиск текста в файле чертежа DWG — конфигурация C# API

Aspose.CAD for .NET поддерживает создание и управление различными чертежами САПР, такими как DWG, DXF и несколько других форматов файлов. Вы можете легко настроить API, загрузив файлы DLL из раздела Загрузки или выполнив следующую команду установки NuGet:

PM> Install-Package Aspose.CAD

Как искать текст в файле DWG с помощью C#

Следующие шаги демонстрируют, как искать текст в файле DWG с помощью C#:

  1. Загрузите существующий файл DWG.
  2. Поиск текста путем повторения объектов CadText.
  3. Поиск текста на определенном макете.
  4. Экспортируйте файл в формат PDF.

Поиск текста в файле чертежа DWG на C#

Для поиска текста в файле DWG с помощью C# необходимо выполнить следующие шаги:

  1. Загрузите существующий файл DWG с классом CadImage.
  2. Поиск текста путем перебора сущностей CadText.
  3. Поиск текста на определенном макете.
  4. Экспортируйте файл в формат PDF.

В приведенном ниже примере кода показано, как выполнять поиск текста в файле DWG с помощью C#:

// Загрузите существующий файл DWG как CadImage.
using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath))
{
    // Поиск текста в файле 
    foreach (CadBaseEntity entity in cadImage.Entities)
    {
        // Мы перебираем объекты CadText, но некоторые другие объекты также могут содержать текст, например, CadMText и другие.
        IterateCADNodes(entity);
    }

    // Поиск текста в определенном макете, получение всех имен макетов и связывание каждого макета с соответствующим блоком с сущностями.
    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");

        // Блок поиска, применим только для DWG
        CadBlockTableObject blockTableObjectReference = null;
        foreach (CadBlockTableObject tableObject in cadImage.BlocksTables)
        {
            if (string.Equals(tableObject.HardPointerToLayout, layout.ObjectHandle))
            {
                blockTableObjectReference = tableObject;
                break;
            }
        }

        if (blockTableObjectReference != null)
        {
            // Коллекция cadBlockEntity.Entities содержит информацию обо всех объектах на конкретном макете.
            CadBlockEntity cadBlockEntity = cadImage.BlockEntities[blockTableObjectReference.BlockName];
        }
    }

    // Экспорт в PDF
    CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
    rasterizationOptions.PageWidth = 1600;
    rasterizationOptions.PageHeight = 1600;
    rasterizationOptions.AutomaticLayoutsScaling = true;

    // Если коллекция cadBlockEntity для выбранного макета или коллекция entityOnLayouts по BlockTableRecordHandle макета (для dxf) пуста
    rasterizationOptions.Layouts = new[] { "Layout1" };

    ImageOptions.PdfOptions pdfOptions = new PdfOptions();

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





public static void SearchTextInDWGAutoCADFile()
{
    // Путь к каталогу документов.            
    string sourceFilePath = "search.dwg";
    // Загрузите существующий файл DWG как CadImage. 
    CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath);

    // Поиск текста в разделе сущностей 
    foreach (var entity in cadImage.Entities)
    {
        IterateCADNodes(entity);
    }

    // Поиск текста в блоке 
    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;
    }
}

Получить бесплатную временную лицензию

Вы можете протестировать функции API без каких-либо оценочных ограничений, запросив бесплатную временную лицензию.

Заключение

В этой статье вы узнали, как выполнять программный поиск текста в файле DWG на языке C#. Кроме того, вы можете изучить различные функции API, заглянув в раздел документация. Если у вас возникнут вопросы, напишите нам на форум.

Смотрите также

Просмотр файлов DWG на основе ASP.NET