Condividi tramite


Procedura: creare smart tag con sistemi di riconoscimento personalizzati in Word e .NET Framework 4

Nei progetti Word destinati a .NET Framework 4, è possibile controllare il riconoscimento degli smart tag nei documenti di Word implementando l'interfaccia ISmartTagExtension.

Per eseguire uno smart tag, gli utenti finali devono abilitare gli smart tag in Word o Excel. Per ulteriori informazioni, vedere Procedura: abilitare gli smart tag in Word ed Excel.

Si applica a: le informazioni fornite in questo argomento sono valide per i progetti a livello di documento e di applicazione per Word 2007. Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazioni di Office.

Per aggiungere uno smart tag con un sistema di riconoscimento personalizzato a un documento di Word

  1. Creare un progetto a livello di documento o di applicazione per Word 2007. Per ulteriori informazioni, vedere Procedura: creare progetti di Office in Visual Studio.

  2. Aggiungere un riferimento all'assembly Microsoft.Office.Interop.SmartTag (versione 12.0.0.0) dalla scheda .NET della finestra di dialogo Aggiungi riferimento.

  3. Aggiungere un file di classe al progetto e creare una classe che implementa l'interfaccia ISmartTagExtension.

  4. Nella nuova classe creare un oggetto SmartTag che rappresenta lo smart tag e creare uno o più oggetti Action che rappresentano le azioni smart tag. Utilizzare i metodi Globals.Factory.CreateSmartTag e Globals.Factory.CreateAction per creare tali oggetti.

  5. Implementare il metodo Recognize e scrivere il comportamento di riconoscimento personalizzato.

    L'implementazione deve chiamare il metodo PersistTag del parametro context affinché lo smart tag venga riconosciuto in Word.

  6. Implementare la proprietà ExtensionBase per restituire l'oggetto SmartTag.

  7. Creare gestori eventi per rispondere all'evento Click, ed eventualmente anche all'evento BeforeCaptionShow, delle azioni create.

  8. Nel file di codice del documento del progetto, aggiungere l'istanza dello smart tag alla proprietà VstoSmartTags della classe ThisDocument (per un progetto a livello di documento) o alla proprietà VstoSmartTags della classe ThisAddIn (per un progetto a livello di applicazione).

Esempio

Nell'esempio di codice riportato di seguito viene illustrato come creare uno smart tag personalizzato in un documento di Word. Nell'esempio viene implementato il metodo Recognize per riconoscere i termini sales e organization. Il metodo Recognize aggiunge una coppia chiave-valore all'insieme delle proprietà con chiave per lo smart tag. Chiama quindi il metodo PersistTag per riconoscere lo smart tag e salvare la proprietà del nuovo smart tag.

Per testare l'esempio, digitare le parole sales e organization in differenti punti del documento, quindi provare a utilizzare le azioni dello smart tag. Un'azione consentirà di visualizzare il valore di proprietà corrispondente per il termine riconosciuto, mentre l'altra lo spazio dei nomi e il titolo dello smart tag.

Imports System
Imports System.Windows.Forms
Imports Microsoft.Office.Interop.SmartTag
Imports Microsoft.Office.Tools.Word

Public Class CustomSmartTag
    Implements ISmartTagExtension
    ' Declare the smart tag.
    Private smartTagDemo As Microsoft.Office.Tools.Word.SmartTag

    ' Declare actions for this smart tag.
    WithEvents Action1 As Microsoft.Office.Tools.Word.Action
    WithEvents Action2 As Microsoft.Office.Tools.Word.Action

    Public Sub New()
        Me.smartTagDemo = Globals.Factory.CreateSmartTag(
            "https://www.contoso.com/Demo#DemoSmartTag", "Custom Smart Tag", Me)

        Action1 = Globals.Factory.CreateAction("Display property value")
        Action2 = Globals.Factory.CreateAction("Display smart tag details")

        smartTagDemo.Terms.AddRange(New String() {"sales", "organization"})
        smartTagDemo.Actions = New Microsoft.Office.Tools.Word.Action() {Action1, Action2}

    End Sub

    Private Sub Recognize(ByVal text As String,
        ByVal site As ISmartTagRecognizerSite,
        ByVal tokenList As ISmartTagTokenList,
        ByVal context As SmartTagRecognizeContext) Implements ISmartTagExtension.Recognize

        For Each term As String In smartTagDemo.Terms
            ' Search the text for the current smart tag term.
            Dim index As Integer = text.IndexOf(term, 0)

            While (index >= 0)
                ' Create a smart tag token and a property bag for the recognized term.
                Dim propertyBag As ISmartTagProperties = site.GetNewPropertyBag()

                ' Write a new property value.
                Dim key As String = "Key1"
                propertyBag.Write(key, DateTime.Now.ToString())

                ' Attach the smart tag to the term in the document
                context.PersistTag(index, term.Length, propertyBag)

                ' Increment the index and then find the next instance of the smart tag term.
                index += term.Length
                index = text.IndexOf(term, index)
            End While
        Next
    End Sub

    ' This action displays the property value for the term.
    Private Sub Action1_Click(ByVal sender As Object,
        ByVal e As Microsoft.Office.Tools.Word.ActionEventArgs) Handles Action1.Click
        Dim propertyBag As ISmartTagProperties = e.Properties
        Dim key As String = "Key1"
        MessageBox.Show(("The corresponding value of " & key & " is: ") + propertyBag.Read(key))
    End Sub

    ' This action displays smart tag details.
    Private Sub Action2_Click(ByVal sender As Object,
        ByVal e As Microsoft.Office.Tools.Word.ActionEventArgs) Handles Action2.Click
        MessageBox.Show(("The current smart tag caption is '" &
            smartTagDemo.Caption & "'. The current smart tag type is '") &
            smartTagDemo.SmartTagType & "'.")
    End Sub

    Public ReadOnly Property Base() As Microsoft.Office.Tools.Word.SmartTag
        Get
            Return (smartTagDemo)
        End Get
    End Property

    Public ReadOnly Property ExtensionBase() As Object Implements ISmartTagExtension.ExtensionBase
        Get
            Return (smartTagDemo)
        End Get
    End Property
End Class
using System;
using System.Windows.Forms;
using Microsoft.Office.Interop.SmartTag;
using Microsoft.Office.Tools.Word;

namespace CustomSmartTagExample
{
    public class CustomSmartTag : ISmartTagExtension
    {
        // Declare the smart tag.
        Microsoft.Office.Tools.Word.SmartTag smartTagDemo;

        // Declare actions for this smart tag.
        private Microsoft.Office.Tools.Word.Action Action1;
        private Microsoft.Office.Tools.Word.Action Action2;

        public CustomSmartTag()
        {
            this.smartTagDemo = Globals.Factory.CreateSmartTag(
                "https://www.contoso.com/Demo#DemoSmartTag", "Custom Smart Tag", this);

            Action1 = Globals.Factory.CreateAction("Display property value");
            Action2 = Globals.Factory.CreateAction("Display smart tag details");

            smartTagDemo.Terms.AddRange(new string[] { "sales", "organization" });
            smartTagDemo.Actions = new Microsoft.Office.Tools.Word.Action[] { Action1, Action2 };

            Action1.Click += new ActionClickEventHandler(Action1_Click);
            Action2.Click += new ActionClickEventHandler(Action2_Click);
        }

        void ISmartTagExtension.Recognize(string text, ISmartTagRecognizerSite site, ISmartTagTokenList tokenList, 
            SmartTagRecognizeContext context)
        {

            foreach (string term in smartTagDemo.Terms)
            {
                // Search the text for the current smart tag term.
                int index = text.IndexOf(term, 0);

                while (index >= 0)
                {
                    // Create a smart tag token and a property bag for the recognized term.
                    ISmartTagProperties propertyBag = site.GetNewPropertyBag();

                    // Write a new property value.
                    string key = "Key1";
                    propertyBag.Write(key, DateTime.Now.ToString());

                    // Attach the smart tag to the term in the document
                    context.PersistTag(index, term.Length, propertyBag);

                    // Increment the index and then find the next instance of the smart tag term.
                    index += term.Length;
                    index = text.IndexOf(term, index);
                }
            }
        }

        // This action displays the property value for the term.
        private void Action1_Click(object sender,
            Microsoft.Office.Tools.Word.ActionEventArgs e)
        {
            ISmartTagProperties propertyBag = e.Properties;
            string key = "Key1";
            MessageBox.Show("The corresponding value of " + key + " is: " + propertyBag.get_Read(key));
        }

        // This action displays smart tag details.
        private void Action2_Click(object sender,
            Microsoft.Office.Tools.Word.ActionEventArgs e)
        {
            MessageBox.Show("The current smart tag caption is '" +
                smartTagDemo.Caption + "'. The current smart tag type is '" + smartTagDemo.SmartTagType + "'.");
        }


        public Microsoft.Office.Tools.Word.SmartTag Base
        {
            get { return smartTagDemo; }
        }

        public object ExtensionBase
        {
            get { return smartTagDemo; }
        }

    }
}

Compilazione del codice

  • Aggiungere un riferimento nel progetto a Libreria dei tipi Microsoft Smart Tags 2.0 dalla scheda COM della finestra di dialogo Aggiungi riferimento. Accertarsi che la proprietà Copia localmente del riferimento sia false. Se è true, il riferimento non è all'assembly di interoperabilità primario corretto e sarà necessario installare l'assembly dal supporto di installazione di Microsoft Office. Per ulteriori informazioni, vedere Procedura: installare assembly di interoperabilità primari di Office.

  • Copiare il codice di esempio in un nuovo file di classe denominato CustomSmartTag.

  • In C# modificare lo spazio dei nomi in modo che corrisponda al nome del progetto.

  • Aggiungere le istruzioni Imports (in Visual Basic) oppure using (in C#) per gli spazi dei nomi Microsoft.Office.Tools.Word e Microsoft.Office.Interop.SmartTag all'inizio del file della classe.

  • Aggiungere il codice seguente al gestore eventi ThisDocument_Startup o ThisAddIn_Startup contenuto nel progetto. Questo codice consente di aggiungere lo smart tag personalizzato al documento.

    Me.VstoSmartTags.Add(New CustomSmartTag().Base)
    
    this.VstoSmartTags.Add(new CustomSmartTag().Base);
    

Sicurezza

Per eseguire lo smart tag, è necessario attivare gli smart tag in Word. Per ulteriori informazioni, vedere Procedura: abilitare gli smart tag in Word ed Excel.

Vedere anche

Attività

Procedura: abilitare gli smart tag in Word ed Excel

Procedura: aggiungere smart tag ai documenti di Word

Procedura: aggiungere smart tag a cartelle di lavoro di Excel

Procedura: creare smart tag con sistemi di riconoscimento personalizzati in Excel e .NET Framework 3.5

Procedura dettagliata: creazione di uno smart tag tramite una personalizzazione a livello di documento

Procedura dettagliata: creazione di uno smart tag tramite un componente aggiuntivo a livello di applicazione

Concetti

Architettura degli smart tag

Altre risorse

Cenni preliminari sugli smart tag