Using Link Annotations in PDF
Adding Link Annotation into existing PDF file
The following code snippet also work with Aspose.PDF.Drawing library.
A Link Annotation represents a hyperlink, a destination elsewhere, and a document. According to the PDF Standard, link annotation can be used in three cases: open page view, open file, and open web page.
Using Link Annotation to open page view
Several additional steps were performed to create the annotation. We used 2 TextFragmentAbsorbers to find fragments to demo. The first one is for the link annotation text, and the second one indicates some places in the document.
Document document = new Document(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");
To create the annotation we have followed certain steps:
- Create
LinkAnnotation
and pass the page object and the rectangle of the text fragment which is corresponded with annotation. - Set
Action
asGoToAction
and passXYZExplicitDestination
as desired destination. We createdXYZExplicitDestination
based on page, left and top coordinates and zoom. - Add annotation to page annotaion collection.
- Save the document.
Using Link Annotation with named destination
When processing various documents, a situation arises when you are typing and do not know where the annotation will point. In this case you can use a special (named) destination and code will be look like here:
var destinationName = "Link2";
var linkAnnotation2 = new LinkAnnotation(page, linkFragments[2].Rectangle)
{
Action = new GoToAction(document, destinationName)
};
In another place you can create a Named Destination.
document.NamedDestinations.Add(destinationName,
new XYZExplicitDestination(
sampleTextFragments[2].Page,
sampleTextFragments[2].Rectangle.LLX,
sampleTextFragments[2].Rectangle.URX, 1));
Using Link Annotation to open file
The same approach is used when creating an annotation to open a file, as in the examples above.
var linkAnnotation3 = new LinkAnnotation(page, linkFragments[3].Rectangle)
{
Action = new GoToRemoteAction("another.pdf", 2)
};
The difference is that we will use GoToRemoteAction
instead GoToAction
. The constructor of GoToRemoteAction gets two parameters: file name and page number.
You can also use another form and pass file name and some destination. Obviously, you need to create such a destination before using it.
Using Link Annotation to open web page
To open web page just set Action
with GoToURIAction
object.
You can pass a hyperlink as a constructor parameter or any other kind of URI. For example, you can use callto
to implement action with calling phone number.
var linkAnnotation4 = new LinkAnnotation(page, linkFragments[4].Rectangle)
{
Action = new GoToURIAction("https://products.aspose.com/pdf/net"),
// Create Link Annotation and set the action to call a phone number
//Action = new GoToURIAction("callto:678-555-0103")
Color = Color.Blue
};
Adding decorated Link Annotation
You can customize Link Annotation using borders. In the example below we will create a blue dashed border with 3pt of width.
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
};
Yet another example shows how to simulate browser style and use Underline for links.
var linkAnnotation5 = new LinkAnnotation(page, linkFragments[5].Rectangle)
{
Color = Color.Blue
};
linkAnnotation5.Border = new Border(linkAnnotation5)
{
Style = BorderStyle.Underline,
Width = 3
};
Get Link Annotations
Please try using the following code snippet to Get LinkAnnotation from PDF document.
class ExampleLinkAnnotations
{
// The path to the documents directory.
private const string dataDir = RunExamples.GetDataDir_AsposePdf_Annotations();
public static void GetLinkAnnotations()
{
// Load the PDF file
Document document = new Document(dataDir + "SimpleResume_mod.pdf");
var linkAnnotations = document.Pages[1].Annotations.Where(a => a.AnnotationType == AnnotationType.Link);
foreach (Aspose.Pdf.Annotations.Annotation annot in linkAnnotations)
{
// Print the URL of each Link Annotation
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;
// Print the text associated with hyperlink
Console.WriteLine(extractedText);
}
}
}
Delete Link Annotations
The following code snippet shows how to Delete Link Annotation from PDF file. For this we need to find and and remove all link annotations on the 1st page. After this we will save document with removed annotation.
class ExampleLinkAnnotations
{
// The path to the documents directory.
private const string dataDir = RunExamples.GetDataDir_AsposePdf_Annotations();
public static void DeleteLinkAnnotations()
{
// Load the PDF file
Document document = new Document(dataDir + "SimpleResume_mod.pdf");
// Find and delete all link annotation on the 1st page
var linkAnnotations = document.Pages[1].Annotations.Where(a => a.AnnotationType == AnnotationType.Link);
foreach (var la in linkAnnotations)
{
document.Pages[1].Annotations.Delete(la);
}
// Save document with removed annotation
document.Save(dataDir + "SimpleResume_del.pdf");
}
}