Trabajando con Acciones en PDF
El siguiente fragmento de código también funciona con la biblioteca Aspose.PDF.Drawing.
Añadir Hipervínculo en un Archivo PDF
Es posible añadir hipervínculos a archivos PDF, ya sea para permitir a los lectores navegar a otra parte del PDF o a contenido externo.
Para añadir hipervínculos web a documentos PDF:
- Crear un objeto de la clase Document.
- Obtener la clase Page a la que quieres añadir el enlace.
- Crear un objeto LinkAnnotation usando los objetos Page y Rectangle. El objeto rectángulo se utiliza para especificar la ubicación en la página donde se debe añadir el enlace.
- Establecer la propiedad Action al objeto GoToURIAction que especifica la ubicación del URI remoto.
- Para agregar un texto libre:
- Instancia un objeto FreeTextAnnotation. También acepta objetos Page y Rectangle como argumento, por lo que es posible proporcionar los mismos valores que se especifican contra el constructor de LinkAnnotation.
- Utilizando la propiedad Contents del objeto FreeTextAnnotation, especifica la cadena que debe mostrarse en el PDF de salida.
- Opcionalmente, establece el ancho del borde de los objetos LinkAnnotation y FreeTextAnnotation a 0 para que no aparezcan en el documento PDF.
- Una vez que se hayan definido los objetos LinkAnnotation y FreeTextAnnotation, agrega estos enlaces a la colección de Anotaciones del objeto Page.
- Una vez que se han definido los objetos LinkAnnotation y FreeTextAnnotation, añade estos enlaces a la colección de Anotaciones del objeto Page.
- Finalmente, guarda el PDF actualizado utilizando el método Save del objeto Document.
El siguiente fragmento de código muestra cómo añadir un hipervínculo a un archivo PDF.
// Para ejemplos completos y archivos de datos, por favor vaya a https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// La ruta al directorio de documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();
// Abrir documento
Document document = new Document(dataDir + "AddHyperlink.pdf");
// Crear página
Page page = document.Pages[1];
// Crear objeto de anotación de enlace
LinkAnnotation link = new LinkAnnotation(page, new Aspose.Pdf.Rectangle(100, 100, 300, 300));
// Crear objeto de borde para LinkAnnotation
Border border = new Border(link);
// Establecer el valor de ancho del borde como 0
border.Width = 0;
// Establecer el borde para LinkAnnotation
link.Border = border;
// Especificar el tipo de enlace como URI remoto
link.Action = new GoToURIAction("www.aspose.com");
// Añadir anotación de enlace a la colección de anotaciones de la primera página del archivo PDF
page.Annotations.Add(link);
// Crear anotación de texto libre
FreeTextAnnotation textAnnotation = new FreeTextAnnotation(document.Pages[1], new Aspose.Pdf.Rectangle(100, 100, 300, 300), new DefaultAppearance(Aspose.Pdf.Text.FontRepository.FindFont("TimesNewRoman"), 10, System.Drawing.Color.Blue));
// Cadena a añadir como texto libre
textAnnotation.Contents = "Enlace al sitio web de Aspose";
// Establecer el borde para la anotación de texto libre
textAnnotation.Border = border;
// Añadir anotación de texto libre a la colección de anotaciones de la primera página del documento
document.Pages[1].Annotations.Add(textAnnotation);
dataDir = dataDir + "AddHyperlink_out.pdf";
// Guardar documento actualizado
document.Save(dataDir);
Crear un hipervínculo a páginas en el mismo PDF
Aspose.PDF para .NET ofrece una excelente característica para la creación de PDF así como su manipulación. También ofrece la característica de añadir enlaces a páginas de PDF y un enlace puede dirigirse a páginas en otro archivo PDF, una URL web, enlace para lanzar una aplicación o incluso enlace a páginas en el mismo archivo PDF. Para agregar hipervínculos locales (enlaces a páginas en el mismo archivo PDF), se añade una clase llamada LocalHyperlink al espacio de nombres de Aspose.PDF y esta clase tiene una propiedad llamada TargetPageNumber, que se utiliza para especificar la página de destino para el hipervínculo.
Para agregar el hipervínculo local, necesitamos crear un TextFragment para que el enlace pueda asociarse con el TextFragment. La clase TextFragment tiene una propiedad llamada Hyperlink que se utiliza para asociar la instancia de LocalHyperlink. El siguiente fragmento de código muestra los pasos para lograr este requisito.
```csharp
// Para ejemplos completos y archivos de datos, por favor visite https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// La ruta al directorio de documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();
// Crear instancia de Documento
Document doc = new Document();
// Añadir página a la colección de páginas del archivo PDF
Page page = doc.Pages.Add();
// Crear instancia de Fragmento de Texto
Aspose.Pdf.Text.TextFragment text = new Aspose.Pdf.Text.TextFragment("prueba de número de página de enlace a la página 7");
// Crear instancia de hipervínculo local
Aspose.Pdf.LocalHyperlink link = new Aspose.Pdf.LocalHyperlink();
// Establecer la página objetivo para la instancia de enlace
link.TargetPageNumber = 7;
// Establecer hipervínculo para TextFragment
text.Hyperlink = link;
// Añadir texto a la colección de párrafos de la Página
page.Paragraphs.Add(text);
// Crear nueva instancia de TextFragment
text = new TextFragment("prueba de número de página de enlace a la página 1");
// TextFragment debe ser añadido sobre nueva página
text.IsInNewPage = true;
// Crear otra instancia de hipervínculo local
link = new LocalHyperlink();
// Establecer página objetivo para el segundo hipervínculo
link.TargetPageNumber = 1;
// Establecer enlace para el segundo TextFragment
text.Hyperlink = link;
// Añadir texto a la colección de párrafos del objeto de página
page.Paragraphs.Add(text);
dataDir = dataDir + "CreateLocalHyperlink_out.pdf";
// Guardar el documento actualizado
doc.Save(dataDir);
Obtener el destino del hipervínculo (URL) de un PDF
Los enlaces están representados como anotaciones en un archivo PDF y pueden ser añadidos, actualizados o eliminados. Aspose.PDF para .NET también admite obtener el destino (URL) del hipervínculo en un archivo PDF.
Para obtener la URL de un enlace:
- Crea un objeto Document.
- Obtén la Page de la que deseas extraer los enlaces.
- Usa la clase AnnotationSelector para extraer todos los objetos LinkAnnotation de la página especificada.
- Pasa el objeto AnnotationSelector al método Accept del objeto Page.
- Finalmente, extraiga la acción de LinkAnnotation como GoToURIAction.
El siguiente fragmento de código muestra cómo obtener destinos de hipervínculos (URL) de un archivo PDF.
// Para ejemplos completos y archivos de datos, por favor visite https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// La ruta al directorio de documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();
// Cargar el archivo PDF
Document document = new Document(dataDir + "input.pdf");
// Recorrer todas las páginas del PDF
foreach (Aspose.Pdf.Page page in document.Pages)
{
// Obtener las anotaciones de enlace de una página en particular
AnnotationSelector selector = new AnnotationSelector(new Aspose.Pdf.Annotations.LinkAnnotation(page, Aspose.Pdf.Rectangle.Trivial));
page.Accept(selector);
// Crear lista que contiene todos los enlaces
IList<Annotation> list = selector.Selected;
// Iterar a través de cada elemento dentro de la lista
foreach (LinkAnnotation a in list)
{
// Imprimir la URL de destino
Console.WriteLine("\nDestination: " + (a.Action as Aspose.Pdf.Annotations.GoToURIAction).URI + "\n");
}
}
Obtener el Texto del Hipervínculo
Un hipervínculo tiene dos partes: el texto que se muestra en el documento y la URL de destino. En algunos casos, es el texto y no la URL lo que necesitamos.
El texto y las anotaciones/acciones en un archivo PDF están representados por diferentes entidades. El texto en una página es solo un conjunto de palabras y caracteres, mientras que las anotaciones aportan cierta interactividad, como la inherente en un hipervínculo.
Para encontrar el contenido de la URL, necesitas trabajar tanto con la anotación como con el texto. El objeto Annotation no tiene el texto en sí, pero se sitúa debajo del texto en la página. Por lo tanto, para obtener el texto, la Anotación proporciona los límites de la URL, mientras que el objeto Texto proporciona los contenidos de la URL. Por favor, consulta el siguiente fragmento de código.
{
public static void Run()
{
try
{
// ExStart:GetHyperlinkText
// La ruta al directorio de documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();
// Cargar el archivo PDF
Document document = new Document(dataDir + "input.pdf");
// Iterar a través de cada página del PDF
foreach (Page page in document.Pages)
{
// Mostrar anotación de enlace
ShowLinkAnnotations(page);
}
// ExEnd:GetHyperlinkText
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
// ExStart:ShowLinkAnnotations
public static void ShowLinkAnnotations(Page page)
{
foreach (Aspose.Pdf.Annotations.Annotation annot in page.Annotations)
{
if (annot is LinkAnnotation)
{
// Imprimir la URL de cada Anotación de Enlace
Console.WriteLine("URI: " + ((annot as LinkAnnotation).Action as GoToURIAction).URI);
TextAbsorber absorber = new TextAbsorber();
absorber.TextSearchOptions.LimitToPageBounds = true;
absorber.TextSearchOptions.Rectangle = annot.Rect;
page.Accept(absorber);
string extractedText = absorber.Text;
// Imprimir el texto asociado con el hipervínculo
Console.WriteLine(extractedText);
}
}
}
// ExEnd:ShowLinkAnnotations
}
}
Eliminar la Acción de Abrir Documento de un Archivo PDF
Cómo Especificar la Página del PDF al Visualizar el Documento explicó cómo indicar que un documento se abra en una página diferente a la primera. Al concatenar varios documentos, y uno o más tienen establecida una acción GoTo, probablemente quieras eliminarlas. Por ejemplo, si combinas dos documentos y el segundo tiene una acción GoTo que te lleva a la segunda página, el documento resultante se abrirá en la segunda página del segundo documento en lugar de en la primera página del documento combinado. Para evitar este comportamiento, elimina el comando de acción de apertura.
Para eliminar una acción de apertura:
- Establece la propiedad OpenAction del objeto Document a null.
- Guarda el PDF actualizado utilizando el método Save del objeto Document.
El siguiente fragmento de código muestra cómo eliminar una acción de abrir documento del archivo PDF. El siguiente fragmento de código muestra cómo eliminar una acción de apertura de documentos de un archivo PDF.
// Para ejemplos completos y archivos de datos, por favor visite https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// La ruta al directorio de documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();
// Abrir documento
Document document = new Document(dataDir + "RemoveOpenAction.pdf");
// Eliminar la acción de apertura del documento
document.OpenAction = null;
dataDir = dataDir + "RemoveOpenAction_out.pdf";
// Guardar el documento actualizado
document.Save(dataDir);
Cómo especificar la página PDF al visualizar el documento
Al visualizar archivos PDF en un visor de PDF como Adobe Reader, los archivos generalmente se abren en la primera página. Sin embargo, es posible configurar el archivo para que se abra en una página diferente.
La clase XYZExplicitDestination le permite especificar una página en un archivo PDF que desea abrir. La clase XYZExplicitDestination te permite especificar una página en un archivo PDF que deseas abrir.
// Para ejemplos completos y archivos de datos, por favor visita https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// La ruta al directorio de documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();
// Cargar el archivo PDF
Document doc = new Document(dataDir + "SpecifyPageWhenViewing.pdf");
// Obtener la instancia de la segunda página del documento
Page page2 = doc.Pages[2];
// Crear la variable para establecer el factor de zoom de la página objetivo
double zoom = 1;
// Crear una instancia de GoToAction
GoToAction action = new GoToAction(doc.Pages[2]);
// Ir a la página 2
action.Destination = new XYZExplicitDestination(page2, 0, page2.Rect.Height, zoom);
// Establecer la acción de apertura del documento
doc.OpenAction = action;
// Guardar el documento actualizado
doc.Save(dataDir + "goto2page_out.pdf");