Azure Ai Document Intelligence Dotnet

作者 microsoft354361d83247MIT收錄於 2026年10月8日更新於 2026年10月8日

Azure AI Document Intelligence SDK for .NET. Extract text, tables, and structured data from documents using prebuilt and custom models. Use for invoice processing, receipt extraction, ID document analysis, and custom document models. Triggers: "Document Intelligence", "DocumentIntelligenceClient", "form recognizer", "invoice extraction", "receipt OCR", "document analysis .NET".

精選僅含說明Software Development
AI 產生的概覽

指導 .NET 開發人員使用 Azure AI 文件智慧 SDK 從文件中擷取文字、表格與欄位。

功能
此技能為 Azure.AI.DocumentIntelligence .NET SDK 提供參考說明與 C# 程式碼範例。內容涵蓋驗證、用於發票、收據、身分證件與版面的預建模型、自訂模型與分類器的建置,以及模型管理。它產出的是指引與範例程式碼,本身不會執行指令碼。
適用情境
適用於建置需要 OCR、發票或收據擷取、身分證件分析或自訂文件模型的 .NET 應用程式。也適合以程式設計方式管理文件智慧模型與分類器。
執行需求
需要 .NET SDK,以及 Azure.AI.DocumentIntelligence 與 Azure.Identity NuGet 套件。需要 Azure 文件智慧端點,以及 API 金鑰或 Microsoft Entra 認證;需要連線至 Azure 的網路存取。未包含指令碼。

Azure.AI.DocumentIntelligence (.NET)

Extract text, tables, and structured data from documents using prebuilt and custom models.

Installation

bash
dotnet add package Azure.AI.DocumentIntelligencedotnet add package Azure.Identity

Current Version: v1.0.0 (GA)

Environment Variables

bash
DOCUMENT_INTELLIGENCE_ENDPOINT=https://<resource-name>.cognitiveservices.azure.com/  # Required: Document Intelligence endpointDOCUMENT_INTELLIGENCE_API_KEY=<your-api-key>  # Only required for AzureKeyCredential authBLOB_CONTAINER_SAS_URL=https://<storage>.blob.core.windows.net/<container>?<sas-token>  # Optional: blob container SAS URL for training dataAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production

Authentication

Microsoft Entra Token Credential

csharp
using Azure.Identity;using Azure.AI.DocumentIntelligence;
string endpoint = Environment.GetEnvironmentVariable("DOCUMENT_INTELLIGENCE_ENDPOINT");// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>var credential = new DefaultAzureCredential(    DefaultAzureCredential.DefaultEnvironmentVariableName);// Or use a specific credential directly in production:// See https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes// var credential = new ManagedIdentityCredential();var client = new DocumentIntelligenceClient(new Uri(endpoint), credential);

Note: Entra ID requires a custom subdomain (e.g., https://<resource-name>.cognitiveservices.azure.com/), not a regional endpoint.

API Key

csharp
string endpoint = Environment.GetEnvironmentVariable("DOCUMENT_INTELLIGENCE_ENDPOINT");string apiKey = Environment.GetEnvironmentVariable("DOCUMENT_INTELLIGENCE_API_KEY");var client = new DocumentIntelligenceClient(new Uri(endpoint), new AzureKeyCredential(apiKey));

Client Types

ClientPurpose
DocumentIntelligenceClientAnalyze documents, classify documents
DocumentIntelligenceAdministrationClientBuild/manage custom models and classifiers

Prebuilt Models

Model IDDescription
prebuilt-readExtract text, languages, handwriting
prebuilt-layoutExtract text, tables, selection marks, structure
prebuilt-invoiceExtract invoice fields (vendor, items, totals)
prebuilt-receiptExtract receipt fields (merchant, items, total)
prebuilt-idDocumentExtract ID document fields (name, DOB, address)
prebuilt-businessCardExtract business card fields
prebuilt-tax.us.w2Extract W-2 tax form fields
prebuilt-healthInsuranceCard.usExtract health insurance card fields

Core Workflows

1. Analyze Invoice

csharp
using Azure.AI.DocumentIntelligence;
Uri invoiceUri = new Uri("https://example.com/invoice.pdf");
Operation<AnalyzeResult> operation = await client.AnalyzeDocumentAsync(    WaitUntil.Completed,     "prebuilt-invoice",     invoiceUri);
AnalyzeResult result = operation.Value;
foreach (AnalyzedDocument document in result.Documents){    if (document.Fields.TryGetValue("VendorName", out DocumentField vendorNameField)        && vendorNameField.FieldType == DocumentFieldType.String)    {        string vendorName = vendorNameField.ValueString;        Console.WriteLine($"Vendor Name: '{vendorName}', confidence: {vendorNameField.Confidence}");    }
    if (document.Fields.TryGetValue("InvoiceTotal", out DocumentField invoiceTotalField)        && invoiceTotalField.FieldType == DocumentFieldType.Currency)    {        CurrencyValue invoiceTotal = invoiceTotalField.ValueCurrency;        Console.WriteLine($"Invoice Total: '{invoiceTotal.CurrencySymbol}{invoiceTotal.Amount}'");    }        // Extract line items    if (document.Fields.TryGetValue("Items", out DocumentField itemsField)        && itemsField.FieldType == DocumentFieldType.List)    {        foreach (DocumentField item in itemsField.ValueList)        {            var itemFields = item.ValueDictionary;            if (itemFields.TryGetValue("Description", out DocumentField descField))                Console.WriteLine($"  Item: {descField.ValueString}");        }    }}

2. Extract Layout (Text, Tables, Structure)

csharp
Uri fileUri = new Uri("https://example.com/document.pdf");
Operation<AnalyzeResult> operation = await client.AnalyzeDocumentAsync(    WaitUntil.Completed,     "prebuilt-layout",     fileUri);
AnalyzeResult result = operation.Value;
// Extract text by pageforeach (DocumentPage page in result.Pages){    Console.WriteLine($"Page {page.PageNumber}: {page.Lines.Count} lines, {page.Words.Count} words");        foreach (DocumentLine line in page.Lines)    {        Console.WriteLine($"  Line: '{line.Content}'");    }}
// Extract tablesforeach (DocumentTable table in result.Tables){    Console.WriteLine($"Table: {table.RowCount} rows x {table.ColumnCount} columns");    foreach (DocumentTableCell cell in table.Cells)    {        Console.WriteLine($"  Cell ({cell.RowIndex}, {cell.ColumnIndex}): {cell.Content}");    }}

3. Analyze Receipt

csharp
Operation<AnalyzeResult> operation = await client.AnalyzeDocumentAsync(    WaitUntil.Completed,     "prebuilt-receipt",     receiptUri);
AnalyzeResult result = operation.Value;
foreach (AnalyzedDocument document in result.Documents){    if (document.Fields.TryGetValue("MerchantName", out DocumentField merchantField))        Console.WriteLine($"Merchant: {merchantField.ValueString}");            if (document.Fields.TryGetValue("Total", out DocumentField totalField))        Console.WriteLine($"Total: {totalField.ValueCurrency.Amount}");            if (document.Fields.TryGetValue("TransactionDate", out DocumentField dateField))        Console.WriteLine($"Date: {dateField.ValueDate}");}

4. Build Custom Model

csharp
var adminClient = new DocumentIntelligenceAdministrationClient(    new Uri(endpoint),     new AzureKeyCredential(apiKey));
string modelId = "my-custom-model";Uri blobContainerUri = new Uri("<blob-container-sas-url>");
var blobSource = new BlobContentSource(blobContainerUri);var options = new BuildDocumentModelOptions(modelId, DocumentBuildMode.Template, blobSource);
Operation<DocumentModelDetails> operation = await adminClient.BuildDocumentModelAsync(    WaitUntil.Completed,     options);
DocumentModelDetails model = operation.Value;
Console.WriteLine($"Model ID: {model.ModelId}");Console.WriteLine($"Created: {model.CreatedOn}");
foreach (var docType in model.DocumentTypes){    Console.WriteLine($"Document type: {docType.Key}");    foreach (var field in docType.Value.FieldSchema)    {        Console.WriteLine($"  Field: {field.Key}, Confidence: {docType.Value.FieldConfidence[field.Key]}");    }}

5. Build Document Classifier

csharp
string classifierId = "my-classifier";Uri blobContainerUri = new Uri("<blob-container-sas-url>");
var sourceA = new BlobContentSource(blobContainerUri) { Prefix = "TypeA/train" };var sourceB = new BlobContentSource(blobContainerUri) { Prefix = "TypeB/train" };
var docTypes = new Dictionary<string, ClassifierDocumentTypeDetails>(){    { "TypeA", new ClassifierDocumentTypeDetails(sourceA) },    { "TypeB", new ClassifierDocumentTypeDetails(sourceB) }};
var options = new BuildClassifierOptions(classifierId, docTypes);
Operation<DocumentClassifierDetails> operation = await adminClient.BuildClassifierAsync(    WaitUntil.Completed,     options);
DocumentClassifierDetails classifier = operation.Value;Console.WriteLine($"Classifier ID: {classifier.ClassifierId}");

6. Classify Document

csharp
string classifierId = "my-classifier";Uri documentUri = new Uri("https://example.com/document.pdf");
var options = new ClassifyDocumentOptions(classifierId, documentUri);
Operation<AnalyzeResult> operation = await client.ClassifyDocumentAsync(    WaitUntil.Completed,     options);
AnalyzeResult result = operation.Value;
foreach (AnalyzedDocument document in result.Documents){    Console.WriteLine($"Document type: {document.DocumentType}, confidence: {document.Confidence}");}

7. Manage Models

csharp
// Get resource detailsDocumentIntelligenceResourceDetails resourceDetails = await adminClient.GetResourceDetailsAsync();Console.WriteLine($"Custom models: {resourceDetails.CustomDocumentModels.Count}/{resourceDetails.CustomDocumentModels.Limit}");
// Get specific modelDocumentModelDetails model = await adminClient.GetModelAsync("my-model-id");Console.WriteLine($"Model: {model.ModelId}, Created: {model.CreatedOn}");
// List modelsawait foreach (DocumentModelDetails modelItem in adminClient.GetModelsAsync()){    Console.WriteLine($"Model: {modelItem.ModelId}");}
// Delete modelawait adminClient.DeleteModelAsync("my-model-id");

Key Types Reference

TypeDescription
DocumentIntelligenceClientMain client for analysis
DocumentIntelligenceAdministrationClientModel management
AnalyzeResultResult of document analysis
AnalyzedDocumentSingle document within result
DocumentFieldExtracted field with value and confidence
DocumentFieldTypeString, Date, Number, Currency, etc.
DocumentPagePage info (lines, words, selection marks)
DocumentTableExtracted table with cells
DocumentModelDetailsCustom model metadata
BlobContentSourceTraining data source

Build Modes

ModeUse Case
DocumentBuildMode.TemplateFixed layout documents (forms)
DocumentBuildMode.NeuralVariable layout documents

Best Practices

  1. Use DefaultAzureCredential for production
  2. Reuse client instances — clients are thread-safe
  3. Handle long-running operations — Use WaitUntil.Completed for simplicity
  4. Check field confidence — Always verify Confidence property
  5. Use appropriate model — Prebuilt for common docs, custom for specialized
  6. Use custom subdomain — Required for Entra ID authentication

Error Handling

csharp
using Azure;
try{    var operation = await client.AnalyzeDocumentAsync(        WaitUntil.Completed,         "prebuilt-invoice",         documentUri);}catch (RequestFailedException ex){    Console.WriteLine($"Error: {ex.Status} - {ex.Message}");}

Related SDKs

SDKPurposeInstall
Azure.AI.DocumentIntelligenceDocument analysis (this SDK)dotnet add package Azure.AI.DocumentIntelligence
Azure.AI.FormRecognizerLegacy SDK (deprecated)Use DocumentIntelligence instead

Reference Links

來源與署名

來源:microsoft/skills位於.github/plugins/azure-sdk-dotnet/skills/azure-ai-document-intelligence-dotnet提交354361d

授權條款: MIT

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架