azure-ai-formrecognizer-java

I'm ready to translate text to French while preserving Markdown formatting. However, I notice your message appears to be incomplete - it only contains "---" and "|" characters. Please provide the complete text you'd like me to translate, and I'll: - Preserve all Markdown formatting (headings, lists, code blocks, tables, links) - Keep proper nouns, brands, technical identifiers, and commands in English - Return only the translation without preamble Please share the text you want translated.

npx skills add https://github.com/microsoft/skills --skill azure-ai-formrecognizer-java

SDK Azure AI Document Intelligence pour Java

Changement de marque : Azure AI Form Recognizer est maintenant Azure AI Document Intelligence. Les nouveaux projets doivent utiliser com.azure:azure-ai-documentintelligence. Le package hérité azure-ai-formrecognizer cible uniquement la version API 2023-07-31. Voir Guide de migration.

Avant l'implémentation

Recherchez les modèles API actuels dans microsoft-docs MCP :

  • Requête : "azure-ai-documentintelligence Java SDK"
  • Vérifiez : Les paramètres correspondent à la version du SDK installée (dernière GA : 1.0.7)

Installation

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-ai-documentintelligence</artifactId>
    <version>1.0.0</version>
</dependency>

<!-- Pour DefaultAzureCredential -->
<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
    <version>1.14.2</version>
</dependency>

Variables d'environnement

DOCUMENT_INTELLIGENCE_ENDPOINT=https://<resource>.cognitiveservices.azure.com/

Authentification

DefaultAzureCredential (Recommandé)

import com.azure.ai.documentintelligence.DocumentIntelligenceClient;
import com.azure.ai.documentintelligence.DocumentIntelligenceClientBuilder;
import com.azure.identity.DefaultAzureCredentialBuilder;

DocumentIntelligenceClient client = new DocumentIntelligenceClientBuilder()
    .endpoint(System.getenv("DOCUMENT_INTELLIGENCE_ENDPOINT"))
    .credential(new DefaultAzureCredentialBuilder().build())
    .buildClient();

Clé API

import com.azure.core.credential.AzureKeyCredential;

DocumentIntelligenceClient client = new DocumentIntelligenceClientBuilder()
    .endpoint(System.getenv("DOCUMENT_INTELLIGENCE_ENDPOINT"))
    .credential(new AzureKeyCredential(System.getenv("DOCUMENT_INTELLIGENCE_KEY")))
    .buildClient();

Client d'administration

import com.azure.ai.documentintelligence.DocumentIntelligenceAdministrationClient;
import com.azure.ai.documentintelligence.DocumentIntelligenceAdministrationClientBuilder;

DocumentIntelligenceAdministrationClient adminClient = new DocumentIntelligenceAdministrationClientBuilder()
    .endpoint(System.getenv("DOCUMENT_INTELLIGENCE_ENDPOINT"))
    .credential(new DefaultAzureCredentialBuilder().build())
    .buildClient();

Client asynchrone

import com.azure.ai.documentintelligence.DocumentIntelligenceAsyncClient;

DocumentIntelligenceAsyncClient asyncClient = new DocumentIntelligenceClientBuilder()
    .endpoint(System.getenv("DOCUMENT_INTELLIGENCE_ENDPOINT"))
    .credential(new DefaultAzureCredentialBuilder().build())
    .buildAsyncClient();

Modèles prédéfinis

ID du modèle Objectif
prebuilt-read Extraire du texte, des lignes, des mots, des langues
prebuilt-layout Texte, tableaux, marques de sélection, structure
prebuilt-receipt Extraction de données de reçu
prebuilt-invoice Extraction de champs de facture
prebuilt-idDocument Documents d'identité (passeport, permis)
prebuilt-tax.us.w2 Formulaires fiscaux US W2
prebuilt-healthInsuranceCard.us Cartes d'assurance maladie US
prebuilt-contract Extraction de champs de contrat

Modèles supprimés : prebuilt-businessCard et prebuilt-document sont supprimés dans la version API 2024-11-30. Utilisez le package hérité azure-ai-formrecognizer pour ceux-ci.

Modèles principaux

Analyser à partir d'un fichier

import com.azure.ai.documentintelligence.models.*;
import com.azure.core.util.BinaryData;
import com.azure.core.util.polling.SyncPoller;
import java.io.File;

File document = new File("document.pdf");
BinaryData documentData = BinaryData.fromFile(document.toPath(), (int) document.length());

SyncPoller<AnalyzeOperationDetails, AnalyzeResult> poller =
    client.beginAnalyzeDocument("prebuilt-layout",
        new AnalyzeDocumentOptions(documentData));

AnalyzeResult result = poller.getFinalResult();

Analyser à partir d'une URL

String documentUrl = "https://example.com/invoice.pdf";

SyncPoller<AnalyzeOperationDetails, AnalyzeResult> poller =
    client.beginAnalyzeDocument("prebuilt-invoice",
        new AnalyzeDocumentOptions(documentUrl));

AnalyzeResult result = poller.getFinalResult();

Extraire la disposition

AnalyzeResult result = poller.getFinalResult();

for (DocumentPage page : result.getPages()) {
    System.out.printf("Page has width: %.2f and height: %.2f, measured with unit: %s%n",
        page.getWidth(), page.getHeight(), page.getUnit());

    // Lignes
    for (DocumentLine line : page.getLines()) {
        System.out.printf("Line '%s' is within bounding box %s.%n",
            line.getContent(), line.getPolygon());
    }

    // Marques de sélection
    for (DocumentSelectionMark mark : page.getSelectionMarks()) {
        System.out.printf("Selection mark is '%s' with confidence %.2f.%n",
            mark.getState(), mark.getConfidence());
    }
}

// Tableaux
for (DocumentTable table : result.getTables()) {
    System.out.printf("Table: %d rows x %d columns%n",
        table.getRowCount(), table.getColumnCount());
    for (DocumentTableCell cell : table.getCells()) {
        System.out.printf("Cell[%d,%d]: %s%n",
            cell.getRowIndex(), cell.getColumnIndex(), cell.getContent());
    }
}

Extraire les champs du document

SyncPoller<AnalyzeOperationDetails, AnalyzeResult> poller =
    client.beginAnalyzeDocument("prebuilt-receipt",
        new AnalyzeDocumentOptions(receiptUrl));

AnalyzeResult result = poller.getFinalResult();

for (AnalyzedDocument doc : result.getDocuments()) {
    Map<String, DocumentField> fields = doc.getFields();

    DocumentField merchantName = fields.get("MerchantName");
    if (merchantName != null && merchantName.getType() == DocumentFieldType.STRING) {
        System.out.printf("Merchant: %s (confidence: %.2f)%n",
            merchantName.getValueString(), merchantName.getConfidence());
    }

    DocumentField transactionDate = fields.get("TransactionDate");
    if (transactionDate != null && transactionDate.getType() == DocumentFieldType.DATE) {
        System.out.printf("Date: %s%n", transactionDate.getValueDate());
    }
}

Analyser avec options

SyncPoller<AnalyzeOperationDetails, AnalyzeResult> poller =
    client.beginAnalyzeDocument("my-custom-model",
        new AnalyzeDocumentOptions(documentUrl)
            .setPages(Collections.singletonList("1-3"))
            .setLocale("en-US")
            .setDocumentAnalysisFeatures(Arrays.asList(DocumentAnalysisFeature.LANGUAGES))
            .setOutputContentFormat(DocumentContentFormat.TEXT));

Modèles personnalisés

Créer un modèle personnalisé

String blobContainerUrl = "{SAS_URL_of_training_data}";

SyncPoller<DocumentModelBuildOperationDetails, DocumentModelDetails> poller =
    adminClient.beginBuildDocumentModel(
        new BuildDocumentModelOptions("my-custom-model", DocumentBuildMode.TEMPLATE)
            .setAzureBlobSource(new AzureBlobContentSource(blobContainerUrl)));

DocumentModelDetails model = poller.getFinalResult();
System.out.printf("Model ID: %s%n", model.getModelId());
System.out.printf("Created: %s%n", model.getCreatedOn());

model.getDocumentTypes().forEach((docType, details) -> {
    details.getFieldSchema().forEach((field, schema) -> {
        System.out.printf("Field: %s (%s)%n", field, schema.getType());
    });
});

Gérer les modèles

// Limites des ressources
DocumentIntelligenceResourceDetails resourceDetails = adminClient.getResourceDetails();
System.out.printf("Models: %d / %d%n",
    resourceDetails.getCustomDocumentModels().getCount(),
    resourceDetails.getCustomDocumentModels().getLimit());

// Lister les modèles
PagedIterable<DocumentModelDetails> models = adminClient.listModels();
for (DocumentModelDetails model : models) {
    System.out.printf("Model: %s, Created: %s%n",
        model.getModelId(), model.getCreatedOn());
}

// Obtenir un modèle
DocumentModelDetails model = adminClient.getModel("model-id");

// Supprimer un modèle
adminClient.deleteModel("model-id");

Classification de documents

Créer un classificateur

Map<String, ClassifierDocumentTypeDetails> docTypes = new HashMap<>();
docTypes.put("invoice", new ClassifierDocumentTypeDetails()
    .setAzureBlobSource(new AzureBlobContentSource(containerUrl).setPrefix("invoices/")));
docTypes.put("receipt", new ClassifierDocumentTypeDetails()
    .setAzureBlobSource(new AzureBlobContentSource(containerUrl).setPrefix("receipts/")));

SyncPoller<DocumentClassifierBuildOperationDetails, DocumentClassifierDetails> poller =
    adminClient.beginBuildClassifier(
        new BuildDocumentClassifierOptions("my-classifier", docTypes));

DocumentClassifierDetails classifier = poller.getFinalResult();

Classer un document

SyncPoller<AnalyzeOperationDetails, AnalyzeResult> poller =
    client.beginClassifyDocument("my-classifier",
        new ClassifyDocumentOptions(documentUrl));

AnalyzeResult result = poller.getFinalResult();
for (AnalyzedDocument doc : result.getDocuments()) {
    System.out.printf("Classified as: %s (confidence: %.2f)%n",
        doc.getDocumentType(), doc.getConfidence());
}

Gestion des erreurs

import com.azure.core.exception.HttpResponseException;

try {
    client.beginAnalyzeDocument("prebuilt-receipt",
        new AnalyzeDocumentOptions("invalid-url"));
} catch (HttpResponseException e) {
    System.out.printf("Status: %d, Error: %s%n",
        e.getResponse().getStatusCode(), e.getMessage());
}

Migration depuis azure-ai-formrecognizer

Ancien (formrecognizer v4.x) Nouveau (documentintelligence v1.x)
DocumentAnalysisClient DocumentIntelligenceClient
DocumentAnalysisClientBuilder DocumentIntelligenceClientBuilder
DocumentModelAdministrationClient DocumentIntelligenceAdministrationClient
beginAnalyzeDocumentFromUrl(modelId, url) beginAnalyzeDocument(modelId, new AnalyzeDocumentOptions(url))
beginAnalyzeDocument(modelId, data) beginAnalyzeDocument(modelId, new AnalyzeDocumentOptions(data))
SyncPoller<OperationResult, AnalyzeResult> SyncPoller<AnalyzeOperationDetails, AnalyzeResult>
field.getValueAsString() field.getValueString()
field.getValueAsDate() field.getValueDate()
field.getValueAsDouble() field.getValueNumber()
field.getValueAsList() field.getValueList()
field.getValueAsMap() field.getValueObject()
mark.getSelectionMarkState() mark.getState()
adminClient.beginBuildDocumentModel(url, mode, prefix, options, ctx) adminClient.beginBuildDocumentModel(new BuildDocumentModelOptions(id, mode).setAzureBlobSource(...))
adminClient.getResourceDetails().getCustomDocumentModelCount() adminClient.getResourceDetails().getCustomDocumentModels().getCount()
FORM_RECOGNIZER_ENDPOINT DOCUMENT_INTELLIGENCE_ENDPOINT

Fichiers de référence

Fichier Contenu
references/examples.md Exemples de code complets pour tous les scénarios