在 DWG C# 中搜索文本

DWG 工程圖文件包含 2D 或 3D 設計數據。它被設計師、工程師和建築師廣泛使用。在某些情況下,您可能需要在 DWG 文件中查找一些文本。因此,本文討論瞭如何在 C# 中以編程方式搜索 DWG 文件中的文本。

在 DWG 工程圖文件中查找文本 - C# API 配置

Aspose.CAD for .NET 支持創建或操作不同的 CAD 繪圖,如 DWG、DXF 和其他幾種文件格式。您可以通過從 下載 部分下載 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文件查看器