DWG C#에서 텍스트 검색

DWG 도면 파일에는 2D 또는 3D 설계 데이터가 포함되어 있습니다. 디자이너, 엔지니어 및 건축가가 널리 사용합니다. 특정 시나리오에서는 DWG 파일에서 일부 텍스트를 찾아야 할 수 있습니다. 따라서 이 문서에서는 C#에서 프로그래밍 방식으로 DWG 파일의 텍스트를 검색하는 방법에 대해 설명합니다.

DWG 도면 파일에서 텍스트 찾기 - C# API 구성

Aspose.CAD for .NET은 DWG, DXF 및 기타 여러 파일 형식과 같은 다양한 CAD 도면 생성 또는 조작을 지원합니다. 다운로드 섹션에서 DLL 파일을 다운로드하거나 다음 NuGet 설치 명령을 실행하여 API를 쉽게 설정할 수 있습니다.

PM> Install-Package Aspose.CAD

C#을 사용하여 DWG 파일에서 텍스트를 검색하는 방법

다음 단계는 C#을 사용하여 DWG 파일에서 텍스트를 검색하는 방법을 보여줍니다.

  1. 기존 DWG 파일을 로드합니다.
  2. CadText 엔터티를 반복하여 텍스트를 검색합니다.
  3. 특정 레이아웃에서 텍스트를 검색합니다.
  4. 파일을 PDF 형식으로 내보냅니다.

C#의 DWG 도면 파일에서 텍스트 검색

C#을 사용하여 DWG 파일에서 텍스트를 검색하려면 아래 단계를 따라야 합니다.

  1. CadImage 클래스로 기존 DWG 파일을 로드합니다.
  2. CadText 엔터티를 반복하여 텍스트를 검색합니다.
  3. 특정 레이아웃에서 텍스트를 검색합니다.
  4. 파일을 PDF 형식으로 내보냅니다.

아래 코드 샘플은 C#을 사용하여 DWG 파일에서 텍스트를 검색하는 방법을 보여줍니다.

// 기존 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 컬렉션 또는 레이아웃의 BlockTableRecordHandle(dxf용)에 의한 entitiesOnLayouts 컬렉션이 비어 있는 경우
    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의 기능을 테스트할 수 있습니다.

결론

이 기사에서는 C#에서 프로그래밍 방식으로 DWG 파일의 텍스트를 검색하는 방법을 배웠습니다. 또한 문서 섹션을 살펴보면 API의 다양한 기능을 탐색할 수 있습니다. 우려 사항이 있는 경우 포럼에 문의해 주십시오.

또한보십시오

ASP.NET 기반 DWG 파일 뷰어