Utilisation des annotations de lien dans les PDF
Ajout d’une annotation de lien dans un fichier PDF existant
Le fragment de code suivant fonctionne également avec la bibliothèque Aspose.PDF.Drawing.
Une Annotation de Lien représente un hyperlien, une destination ailleurs, et un document. Selon la norme PDF, l’annotation de lien peut être utilisée dans trois cas : ouvrir une vue de page, ouvrir un fichier et ouvrir une page web.
Utilisation de l’Annotation de Lien pour ouvrir une vue de page
Plusieurs étapes supplémentaires ont été effectuées pour créer l’annotation. Nous avons utilisé 2 TextFragmentAbsorbers pour trouver des fragments à démontrer. Le premier est pour le texte de l’annotation de lien, et le second indique certains endroits dans le document.
Document document = new Document(System.IO.Path.Combine(_dataDir, "Link Annotation Demo.pdf"));
var page = document.Pages[1];
var regEx = new Regex(@"Link Annotation Demo \d");
TextFragmentAbsorber textFragmentAbsorber1 = new TextFragmentAbsorber(regEx);
textFragmentAbsorber1.Visit(document);
regEx = new Regex(@"Sample text \d");
TextFragmentAbsorber textFragmentAbsorber2 = new TextFragmentAbsorber(regEx);
textFragmentAbsorber2.Visit(document);
var linkFragments = textFragmentAbsorber1.TextFragments;
var sampleTextFragments = textFragmentAbsorber2.TextFragments;
var linkAnnotation1 = new LinkAnnotation(page, linkFragments[1].Rectangle)
{
Action = new GoToAction(
new XYZExplicitDestination(
sampleTextFragments[1].Page,
sampleTextFragments[1].Rectangle.LLX,
sampleTextFragments[1].Rectangle.URX, 1.5))
};
page.Annotations.Add(linkAnnotation1);
document.Save("test.pdf");
Pour créer l’annotation, nous avons suivi certaines étapes :
- Créer
LinkAnnotation
et passer l’objet page et le rectangle du fragment de texte qui correspond à l’annotation. - Définir
Action
commeGoToAction
et passerXYZExplicitDestination
comme destination souhaitée. Nous avons crééXYZExplicitDestination
basé sur la page, les coordonnées gauche et haut et le zoom. - Ajouter l’annotation à la collection d’annotations de la page.
- Enregistrer le document
Utilisation de l’annotation de lien avec destination nommée
Lors du traitement de divers documents, une situation survient lorsque vous tapez et ne savez pas où l’annotation va pointer. Dans ce cas, vous pouvez utiliser une destination spéciale (nommée) et le code ressemblera à ceci :
var destinationName = "Link2";
var linkAnnotation2 = new LinkAnnotation(page, linkFragments[2].Rectangle)
{
Action = new GoToAction(document, destinationName)
};
À un autre endroit, vous pouvez créer une Destination Nomée.
document.NamedDestinations.Add(destinationName,
new XYZExplicitDestination(
sampleTextFragments[2].Page,
sampleTextFragments[2].Rectangle.LLX,
sampleTextFragments[2].Rectangle.URX, 1));
Utilisation de l’annotation de lien pour ouvrir un fichier
La même approche est utilisée lors de la création d’une annotation pour ouvrir un fichier, comme dans les exemples ci-dessus.
var linkAnnotation3 = new LinkAnnotation(page, linkFragments[3].Rectangle)
{
Action = new GoToRemoteAction("another.pdf", 2)
};
La différence est que nous utiliserons GoToRemoteAction
au lieu de GoToAction
. Le constructeur de GoToRemoteAction reçoit deux paramètres : le nom du fichier et le numéro de page.
Vous pouvez également utiliser une autre forme et passer le nom du fichier et une destination quelconque. Évidemment, vous devez créer une telle destination avant de l’utiliser.
Utilisation de l’annotation de lien pour ouvrir une page web
Pour ouvrir une page web, il suffit de définir Action
avec l’objet GoToURIAction
.
Vous pouvez passer un hyperlien comme paramètre du constructeur ou tout autre type d’URI. Par exemple, vous pouvez utiliser callto
pour implémenter une action avec appel d’un numéro de téléphone.
var linkAnnotation4 = new LinkAnnotation(page, linkFragments[4].Rectangle)
{
Action = new GoToURIAction("https://products.aspose.com/pdf/net"),
// Créer une annotation de lien et définir l'action pour appeler un numéro de téléphone
//Action = new GoToURIAction("callto:678-555-0103")
Color = Color.Blue
};
Ajout d’une annotation de lien décorée
Vous pouvez personnaliser l’annotation de lien en utilisant des bordures. Dans l’exemple ci-dessous, nous allons créer une bordure bleue en pointillés d’une largeur de 3pt.
var linkAnnotation4 = new LinkAnnotation(page, linkFragments[4].Rectangle)
{
Action = new GoToURIAction("https://products.aspose.com/pdf/net"),
Color = Color.Blue
};
linkAnnotation4.Border = new Border(linkAnnotation4)
{
Style = BorderStyle.Dashed,
Dash = new Dash(5, 5),
Width = 3
};
Un autre exemple montre comment simuler le style du navigateur et utiliser l’underline pour les liens.
var linkAnnotation5 = new LinkAnnotation(page, linkFragments[5].Rectangle)
{
Color = Color.Blue
};
linkAnnotation5.Border = new Border(linkAnnotation5)
{
Style = BorderStyle.Underline,
Width = 3
};
Obtenir les annotations de lien
Veuillez essayer d’utiliser le fragment de code suivant pour obtenir LinkAnnotation à partir du document PDF.
class ExampleLinkAnnotations
{
// Le chemin vers le répertoire des documents.
private const string _dataDir = RunExamples.GetDataDir_AsposePdf_Annotations();
public static void GetLinkAnnotations()
{
// Charger le fichier PDF
Document document = new Document(System.IO.Path.Combine(_dataDir, "SimpleResume_mod.pdf"));
var linkAnnotations = document.Pages[1].Annotations.Where(a => a.AnnotationType == AnnotationType.Link);
foreach (Aspose.Pdf.Annotations.Annotation annot in linkAnnotations)
{
// Imprimer l'URL de chaque annotation de lien
Console.WriteLine("URI: " + ((annot as LinkAnnotation).Action as GoToURIAction).URI);
TextAbsorber absorber = new TextAbsorber();
absorber.TextSearchOptions.LimitToPageBounds = true;
absorber.TextSearchOptions.Rectangle = annot.Rect;
document.Pages[1].Accept(absorber);
string extractedText = absorber.Text;
// Imprimer le texte associé au lien hypertexte
Console.WriteLine(extractedText);
}
}
}
Supprimer les annotations de lien
Le code suivant montre comment supprimer une annotation de lien d’un fichier PDF. Pour cela, nous devons trouver et supprimer toutes les annotations de lien sur la 1ère page. Après cela, nous enregistrerons le document avec l’annotation supprimée.
class ExampleLinkAnnotations
{
// Le chemin vers le répertoire des documents.
private const string _dataDir = RunExamples.GetDataDir_AsposePdf_Annotations();
public static void DeleteLinkAnnotations()
{
// Charger le fichier PDF
Document document = new Document(System.IO.Path.Combine(_dataDir, "SimpleResume_mod.pdf"));
// Trouver et supprimer toutes les annotations de lien sur la 1ère page
var linkAnnotations = document.Pages[1].Annotations.Where(a => a.AnnotationType == AnnotationType.Link);
foreach (var la in linkAnnotations)
document.Pages[1].Annotations.Delete(la);
// Enregistrer le document avec l'annotation supprimée
document.Save(System.IO.Path.Combine(_dataDir, "SimpleResume_del.pdf"));
}
}