Tìm kiếm văn bản trong DWG C#

Các tệp bản vẽ DWG chứa dữ liệu thiết kế 2D hoặc 3D. Nó được sử dụng rộng rãi bởi các nhà thiết kế, kỹ sư và kiến trúc sư. Trong một số trường hợp nhất định, bạn có thể cần tìm một số văn bản trong tệp DWG. Theo đó, bài viết này thảo luận về cách tìm kiếm văn bản trong tệp DWG theo cách lập trình trong C#.

Tìm văn bản trong tệp bản vẽ DWG – Cấu hình API C#

Aspose.CAD for .NET hỗ trợ tạo hoặc thao tác với các bản vẽ CAD khác nhau như DWG, DXF và một số định dạng tệp khác. Bạn có thể dễ dàng thiết lập API bằng cách tải xuống tệp DLL từ phần Tải xuống hoặc chạy lệnh cài đặt NuGet sau:

PM> Install-Package Aspose.CAD

Cách tìm kiếm văn bản trong tệp DWG bằng C#

Các bước sau đây trình bày cách tìm kiếm văn bản trong tệp DWG bằng C#:

  1. Tải một tệp DWG hiện có.
  2. Tìm kiếm văn bản bằng cách lặp qua các thực thể CadText.
  3. Tìm kiếm văn bản trên một bố cục cụ thể.
  4. Xuất tệp sang định dạng PDF.

Tìm kiếm văn bản trong tệp bản vẽ DWG trong C#

Bạn cần làm theo các bước bên dưới để tìm kiếm văn bản trong tệp DWG bằng C#:

  1. Tải tệp DWG hiện có với lớp CadImage.
  2. Tìm kiếm văn bản bằng cách duyệt qua các thực thể CadText.
  3. Tìm kiếm văn bản trên bố cục cụ thể.
  4. Xuất tệp sang định dạng PDF.

Mẫu mã bên dưới cho biết cách tìm kiếm văn bản trong tệp DWG bằng C#:

// Tải tệp DWG hiện có dưới dạng CadImage.
using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath))
{
    // Tìm kiếm văn bản trong tệp 
    foreach (CadBaseEntity entity in cadImage.Entities)
    {
        // Chúng tôi lặp qua các thực thể CadText, nhưng một số thực thể khác cũng có thể chứa văn bản, ví dụ: CadMText và các thực thể khác
        IterateCADNodes(entity);
    }

    // Tìm kiếm văn bản trên bố cục cụ thể nhận tất cả tên bố cục và liên kết từng bố cục với khối tương ứng với các thực thể
    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");

        // Tìm khối, chỉ áp dụng cho DWG
        CadBlockTableObject blockTableObjectReference = null;
        foreach (CadBlockTableObject tableObject in cadImage.BlocksTables)
        {
            if (string.Equals(tableObject.HardPointerToLayout, layout.ObjectHandle))
            {
                blockTableObjectReference = tableObject;
                break;
            }
        }

        if (blockTableObjectReference != null)
        {
            // Bộ sưu tập cadBlockEntity.Entities chứa thông tin về tất cả các thực thể trên bố cục cụ thể
            CadBlockEntity cadBlockEntity = cadImage.BlockEntities[blockTableObjectReference.BlockName];
        }
    }

    // Xuất sang PDF
    CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
    rasterizationOptions.PageWidth = 1600;
    rasterizationOptions.PageHeight = 1600;
    rasterizationOptions.AutomaticLayoutsScaling = true;

    // Nếu bộ sưu tập cadBlockEntity cho bố cục đã chọn hoặc bộ sưu tập entityOnLayouts theo BlockTableRecordHandle của bố cục (đối với dxf) trống
    rasterizationOptions.Layouts = new[] { "Layout1" };

    ImageOptions.PdfOptions pdfOptions = new PdfOptions();

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





public static void SearchTextInDWGAutoCADFile()
{
    // Đường dẫn đến thư mục tài liệu.            
    string sourceFilePath = "search.dwg";
    // Tải tệp DWG hiện có dưới dạng CadImage. 
    CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath);

    // Tìm kiếm văn bản trong phần thực thể 
    foreach (var entity in cadImage.Entities)
    {
        IterateCADNodes(entity);
    }

    // Tìm kiếm văn bản trong phần khối 
    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;
    }
}

Nhận giấy phép tạm thời miễn phí

Bạn có thể kiểm tra các tính năng của API mà không có bất kỳ giới hạn đánh giá nào bằng cách yêu cầu giấy phép tạm thời miễn phí.

Phần kết luận

Trong bài viết này, bạn đã học cách tìm kiếm văn bản trong tệp DWG bằng lập trình trong C#. Ngoài ra, bạn có thể khám phá các tính năng khác nhau của API bằng cách xem phần tài liệu. Trong trường hợp có bất kỳ thắc mắc nào, vui lòng viết thư cho chúng tôi tại forum.

Xem thêm

Trình xem tệp DWG dựa trên ASP.NET