Java IText:锚点(链接)

时间:2020-01-09 10:36:08  来源:igfitidea点击:

IText中的com.itextpdf.text.Anchor类表示到外部网站或者文档内部的链接。就像网页中的链接一样,可以单击锚点(链接)。

这是一个简单的代码示例:

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class AnchorExample {

  public static void main(String[] args) {

    Document document = new Document();

    try {
      PdfWriter.getInstance(document,
            new FileOutputStream("Anchor.pdf"));

      document.open();

      Paragraph paragraph = new Paragraph();
      paragraph.add(new Phrase("You can find the IText tutorial at "));

      
          Anchor anchor = new Anchor(
          "http://theitroad.local/java-itext/index.html");
          anchor.setReference(
          "http://theitroad.local/java-itext/index.html");
      
      paragraph.add(anchor);

      document.add(paragraph);

      document.close();

    } catch (DocumentException e) {
      e.printStackTrace();
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }

  }
}

注意鼠标指针的形状是手。这意味着我们现在可以单击文本。另请注意,默认情况下,锚没有任何特殊样式。我们将必须自己添加。

内部连结

我们也可以在文档中创建内部链接,就像HTML页面中的内部链接一样。就像在HTML中一样,我们需要链接和目标锚(带有名称的锚)。这是一个代码示例:

import com.itextpdf.text.Anchor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;

/**

 */
public class Anchor2Example {

  public static void main(String[] args) {

    Document document = new Document();

    try {
        PdfWriter.getInstance(document,
                new FileOutputStream("Anchor2.pdf"));

        document.open();

        
            Anchor anchor =
            new Anchor("Jump down to next paragraph");
            anchor.setReference("#linkTarget");
            Paragraph paragraph = new Paragraph();
            paragraph.add(anchor);
            document.add(paragraph);

            Anchor anchorTarget =
            new Anchor("This is the target of the link above");
            anchor.setName("linkTarget");
            Paragraph targetParagraph = new Paragraph();
            targetParagraph.setSpacingBefore(50);

            targetParagraph.add(anchorTarget);
            document.add(targetParagraph);
        

        document.close();
    } catch (DocumentException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

  }
}

这是结果文件。请注意,鼠标指针是如何再次变成手形的。由于链接的目标位于同一页面的正下方,因此单击链接时Adobe Reader可能不会做出反应。但是,如果目标段落位于其他页面上,则Adobe Reader会跳至该页面。