PDF에서 링크 주석 사용하기

기존 PDF 파일에 링크 주석 추가

다음 코드 조각은 Aspose.PDF.Drawing 라이브러리에서도 작동합니다.

링크 주석은 하이퍼링크, 다른 곳의 목적지, 문서를 나타냅니다. PDF 표준에 따르면 링크 주석은 세 가지 경우에 사용할 수 있습니다: 페이지 뷰 열기, 파일 열기, 웹 페이지 열기.

페이지 뷰를 열기 위해 링크 주석 사용하기

주석을 생성하기 위해 몇 가지 추가 단계가 수행되었습니다. 데모를 위해 텍스트 조각을 찾기 위해 2개의 TextFragmentAbsorbers를 사용했습니다. 첫 번째는 링크 주석 텍스트용이고, 두 번째는 문서의 일부 장소를 나타냅니다.

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");

주석을 생성하기 위해 우리는 몇 가지 단계를 따랐습니다:

  1. LinkAnnotation을 생성하고 페이지 객체와 주석과 대응하는 텍스트 단편의 사각형을 전달하세요.
  2. ActionGoToAction으로 설정하고 원하는 목적지로 XYZExplicitDestination을 전달하세요. 원하는 목적지를 페이지, 왼쪽 좌표, 상단 좌표, 확대 비율을 기반으로 XYZExplicitDestination을 생성했습니다.
  3. 페이지 주석 컬렉션에 주석을 추가하세요.
  4. 문서를 저장하세요.

명명된 목적지를 사용하는 링크 주석

다양한 문서를 처리할 때, 타이핑을 하면서 주석이 가리킬 위치를 모르는 상황이 발생합니다. 이 경우 특별한 (명명된) 목적지를 사용할 수 있으며 코드는 다음과 같이 보일 것입니다:

var destinationName = "Link2";
var linkAnnotation2 = new LinkAnnotation(page, linkFragments[2].Rectangle)
{
    Action = new GoToAction(document, destinationName)
};

다른 장소에서 명명된 목적지를 생성할 수 있습니다.

document.NamedDestinations.Add(destinationName,
    new XYZExplicitDestination(
        sampleTextFragments[2].Page,
        sampleTextFragments[2].Rectangle.LLX,
        sampleTextFragments[2].Rectangle.URX, 1));

파일을 열기 위한 링크 주석 사용

위의 예제들에서 사용된 것과 동일한 접근 방식이 파일을 열기 위한 주석을 생성할 때 사용됩니다.

var linkAnnotation3 = new LinkAnnotation(page, linkFragments[3].Rectangle)
{
    Action = new GoToRemoteAction("another.pdf", 2)
};

차이점은 GoToAction 대신 GoToRemoteAction을 사용한다는 것입니다. GoToRemoteAction의 생성자는 파일 이름과 페이지 번호 두 가지 매개변수를 받습니다. 또 다른 형태를 사용하여 파일 이름과 일부 목적지를 전달할 수 있습니다. 명백히, 그것을 사용하기 전에 해당 목적지를 생성해야 합니다.

웹 페이지를 열기 위한 링크 주석 사용

웹 페이지를 열려면 ActionGoToURIAction 객체로 설정하십시오. 생성자 매개변수로 하이퍼링크 또는 다른 종류의 URI를 전달할 수 있습니다. 예를 들어, 전화 번호를 호출하는 작업을 구현하기 위해 callto를 사용할 수 있습니다.

var linkAnnotation4 = new LinkAnnotation(page, linkFragments[4].Rectangle)
{
    Action = new GoToURIAction("https://products.aspose.com/pdf/net"),
    // 링크 주석을 생성하고 전화 번호를 호출하는 작업을 설정
    //Action = new GoToURIAction("callto:678-555-0103")
    Color = Color.Blue
};

장식된 링크 주석 추가

테두리를 사용하여 링크 주석을 사용자 정의할 수 있습니다. 아래 예제에서는 너비가 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
};

또 다른 예제는 브라우저 스타일을 시뮬레이션하고 링크에 밑줄을 사용하는 방법을 보여줍니다.

var linkAnnotation5 = new LinkAnnotation(page, linkFragments[5].Rectangle)
{
    Color = Color.Blue
};
linkAnnotation5.Border = new Border(linkAnnotation5)
{
    Style = BorderStyle.Underline,
    Width = 3
};

링크 주석 가져오기

PDF 문서에서 LinkAnnotation을 가져오려면 다음 코드 스니펫을 사용해 보십시오.

class ExampleLinkAnnotations
{
    // 문서 디렉토리 경로.
    private const string _dataDir = RunExamples.GetDataDir_AsposePdf_Annotations();
    public static void GetLinkAnnotations()
    {
        // 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)
        {
            // 각 링크 주석의 URL 출력
            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;
            // 하이퍼링크와 관련된 텍스트 출력
            Console.WriteLine(extractedText);
        }
    }
}

링크 주석 삭제

다음 코드 스니펫은 PDF 파일에서 링크 주석을 삭제하는 방법을 보여줍니다. 이를 위해 1페이지의 모든 링크 주석을 찾아서 제거해야 합니다. 이후 주석이 제거된 문서를 저장합니다.

class ExampleLinkAnnotations
{
    // 문서 디렉토리 경로.
    private const string _dataDir = RunExamples.GetDataDir_AsposePdf_Annotations();
    public static void DeleteLinkAnnotations()
    {
        // PDF 파일 로드
        Document document = new Document(System.IO.Path.Combine(_dataDir, "SimpleResume_mod.pdf"));
        // 1페이지의 모든 링크 주석 찾기 및 삭제
        var linkAnnotations = document.Pages[1].Annotations.Where(a => a.AnnotationType == AnnotationType.Link);

        foreach (var la in linkAnnotations)
            document.Pages[1].Annotations.Delete(la);
        // 주석이 제거된 문서 저장
        document.Save(System.IO.Path.Combine(_dataDir, "SimpleResume_del.pdf"));
    }
}