import java.awt.Color;
import java.io.File;
import java.io.IOException;
import com.gnostice.pdfone.PDFOne;
import com.gnostice.pdfone.PdfAction;
import com.gnostice.pdfone.PdfAnnot;
import com.gnostice.pdfone.PdfBookmark;
import com.gnostice.pdfone.PdfDocument;
import com.gnostice.pdfone.PdfException;
import com.gnostice.pdfone.PdfLinkAnnot;
import com.gnostice.pdfone.PdfPage;
import com.gnostice.pdfone.PdfRect;
import com.gnostice.pdfone.PdfWriter;
import com.gnostice.pdfone.encodings.PdfEncodings;
import com.gnostice.pdfone.fonts.PdfFont;
public class PdfLinkAnnot_Examples
{
// Activates the component PDFOne.jar
static
{
PDFOne.activate("T95VZE:W8HBPVA:74VQ8QV:LO4V8",
"9B1HRZAP:X5853ERNE:5EREMEGRQ:TX1R10");
}
public static void main(String[] args) throws IOException,
PdfException
{
PdfLinkAnnot_Examples obj = new PdfLinkAnnot_Examples();
obj.PdfLinkAnnot_CONSTRUCTORS();
}
// This code segment creates several link annotation using
// overloaded methods. It also adds several actions to the
// annotations with methods of the PdfLinkAnnot class.
public void PdfLinkAnnot_CONSTRUCTORS() throws IOException,
PdfException
{
PdfWriter writer = PdfWriter.fileWriter(
"PdfLinkAnnot_CONSTRUCTORS.pdf");
PdfDocument document = new PdfDocument(writer);
// Creates two pages
PdfPage page1 = new PdfPage();
PdfPage page2 = new PdfPage();
// Creates a PdfFont object and sets it to a hyperlink color
PdfFont fontCourier = PdfFont.create(
"COURIER", 10, PdfEncodings.WINANSI);
fontCourier.setColor(Color.BLUE);
// Creates a rectangle
PdfRect rectangle = new PdfRect(150, 50, 300, 20);
// Creates a link annotation using the default constructor
PdfLinkAnnot lAnnot1 = new PdfLinkAnnot();
// Specifies the above rectangle as the annotation rectangle
lAnnot1.setRect(rectangle);
// Adds an action to the annotation linking it to page 2
lAnnot1.addActionGoTo(2);
// Makes the annotation look like it has been pushed from
// below the surface of page
lAnnot1.setHighlightMode(PdfLinkAnnot.HIGHLIGHT_MODE_PUSH);
// Writes text inside the annotation rectangle
page1.writeText("Go to page 2", fontCourier, rectangle);
// Adds the link annotation to the page
page1.addAnnotation(lAnnot1);
rectangle = new PdfRect(150, 100, 300, 20);
// Creates a link annotation with specified annotation
// rectangle. Also specifies the color of the annotation
// rectangle.
PdfLinkAnnot lAnnot2 = new PdfLinkAnnot(rectangle,
Color.RED);
// Enables the display of the annotation rectangle
lAnnot2.setShowRect(true);
// Adds action to the annotation linking it to a specified
// rectangular area on page 2
lAnnot2.addActionGoTo(
2, // page number
100, 400, 500, 100); // left, bottom, right, and top
// Makes the contents of the annotation inverted when
// highlighted
lAnnot2.setHighlightMode(PdfLinkAnnot.HIGHLIGHT_MODE_INVERT);
page1.writeText(
"Go to specified rectangular area on page 2.",
fontCourier, rectangle);
page1.addAnnotation(lAnnot2);
page2.drawRect(100, 100, 400, 300);
rectangle = new PdfRect(150, 150, 300, 40);
// Creates a link annotation with specified annotation
// rectangle and flag
PdfLinkAnnot lAnnot3 = new PdfLinkAnnot(
rectangle,
PdfAnnot.FLAG_LOCKED);
// Adds action to annotation linking it to position
// (200, 100) on page 2. Also specifies that page 2 is to
// be zoomed to 200%.
lAnnot3.addActionGoTo(2, // page
200, 100, // position
200); // zoom
// Makes the annotation remain unchanged when highlighted
lAnnot3.setHighlightMode(PdfLinkAnnot.HIGHLIGHT_MODE_NONE);
page1.writeText(
"Go to position (200, 100) on page 2 and zoom 200%.",
fontCourier, rectangle);
page1.addAnnotation(lAnnot3);
// Marks position (200, 100) on page 2
page2.writeText(". (200, 100)", 200, 100);
rectangle = new PdfRect(150, 200, 300, 40);
// Creates a link annotation with specified annotation
// rectangle, flag, and annotation rectangle color
PdfLinkAnnot lAnnot4 = new PdfLinkAnnot(
rectangle,
PdfAnnot.FLAG_LOCKED,
Color.RED);
lAnnot4.setShowRect(true);
// Adds action to annotation linking it to position 50 points
// down from the top of page 2
lAnnot4.addActionGoTo(2, 50, PdfLinkAnnot.FITH);
// Makes the annotation to display an outline when
// highlighted
lAnnot4.setHighlightMode(
PdfLinkAnnot.HIGHLIGHT_MODE_OUTLINE);
page1.writeText(
"Scroll down 50 points on page2 and zoom the page to "
+ "tightly fit its entire width inside the window",
fontCourier, rectangle);
page1.addAnnotation(lAnnot4);
// Marks position 50 points down from the top of page 2
page2.writeText(". (200, 50)", 200, 50);
rectangle = new PdfRect(150, 250, 300, 20);
// Creates a link annotation with specified annotation
// rectangle, subject, contents and title
PdfLinkAnnot lAnnot5 = new PdfLinkAnnot(
rectangle, // annotation rectangle
"Demo", // subject
"Execute Javascript statement", // contents
"PdfLinkAnnot.addActionJavascript" // title
+ "(String script)");
// Adds action to the annotation making it display a
// Javascript alert message
lAnnot5.addActionJavaScript("app.alert('Hello, world!')");
lAnnot5.setHighlightMode(PdfLinkAnnot.HIGHLIGHT_MODE_PUSH);
page1.writeText(
"Select this link for a Javascript message",
fontCourier, rectangle);
page1.addAnnotation(lAnnot5);
// Creates a test PDF file for use it with code segments
// below
char pathSeparator = File.separatorChar;
String testFile = "."
+ pathSeparator
+ "InputDocs"
+ pathSeparator
+ "test_pdf_file.pdf";
PdfWriter writer2 = PdfWriter.fileWriter(testFile);
PdfDocument document2 = new PdfDocument(writer2);
for (int i =1; i <=5; i++) {
PdfPage page = new PdfPage();
if (i == 2) {
page.writeText(". (200, 100)", 200, 100);
page.writeText(". (200, 50)", 200, 50);
}
page.writeText(
"This is page #" + i + " of " + testFile);
document2.add(page);
}
document2.write();
writer2.dispose();
rectangle = new PdfRect(150, 300, 300, 40);
// Creates a link annotation with specified annotation
// rectangle, subject, contents, title, and annotation
// rectangle color
PdfLinkAnnot lAnnot6 = new PdfLinkAnnot(
rectangle, // annotation rectangle
"Demo", // subject
"Launch an application or document with an optional print"
+ "command setting", // contents
"addActionLaunch(String applicationToLaunch, "
+ "boolean print)", // title
Color.RED); // annotation rectangle color
lAnnot6.setShowRect(true);
// Adds action to the annotation to have the test PDF file
// printed
lAnnot6.addActionLaunch(
testFile, // applicationToLaunch
true); // print
lAnnot6.setHighlightMode(PdfLinkAnnot.HIGHLIGHT_MODE_PUSH);
page1.writeText("Select this link to print "
+ testFile,
fontCourier,
rectangle);
page1.addAnnotation(lAnnot6);
rectangle = new PdfRect(150, 350, 300, 20);
// Creates a link annotation with specified annotation
// rectangle, subject, contents, title, and flag
PdfLinkAnnot lAnnot7 = new PdfLinkAnnot(
rectangle, // annotation rectangle
"Demo", // subject
"Execute a named action", // contents
"addActionNamed(int actionType)", // title
PdfAnnot.FLAG_LOCKED); // flag
// Adds a named action to the annotation linking it to the
// last page
lAnnot7.addActionNamed(PdfAction.NAMED_LASTPAGE);
lAnnot7.setHighlightMode(PdfLinkAnnot.HIGHLIGHT_MODE_PUSH);
page1.writeText("Go to last page in document",
fontCourier, rectangle);
page1.addAnnotation(lAnnot7);
rectangle = new PdfRect(150, 400, 300, 20);
// Creates a link annotation with specified, subject,
// contents, title, flag, and annotation rectangle color
PdfLinkAnnot lAnnot8 = new PdfLinkAnnot(
rectangle, // annotation rectangle
"Demo", // subject
"Execute an URI", // contents
"addActionURI(String uri)", // title
PdfAnnot.FLAG_LOCKED, // flag
Color.RED); // color
lAnnot8.setShowRect(true);
// Adds action to the annotation making it link to Gnostice
// website
lAnnot8.addActionURI("http://www.gnostice.com/");
lAnnot8.setHighlightMode(PdfLinkAnnot.HIGHLIGHT_MODE_PUSH);
// Sets border to be displayed
lAnnot8.setShowRect(true);
// Sets border style to dashed
lAnnot8.setBorderStyle(PdfAnnot.BORDERSTYLE_DASHED);
// Sets dash pattern to have 3-point dashes and 2-point gaps
lAnnot8.setDashPattern(new int [] {3, 2});
page1.writeText("Go to Gnostice website",
fontCourier, rectangle);
page1.addAnnotation(lAnnot8);
rectangle = new PdfRect(150, 450, 300, 40);
// Creates a link annotation with specified annotation
// rectangle, subject, contents, title, flag, annotation
// rectangle color, and highlight mode
PdfLinkAnnot lAnnot9 = new PdfLinkAnnot(
rectangle, // annotation rectangle
"Demo", // subject
"Go to a bookmark in an external file", // contents
"addActionRemoteGoTo(String pdfFilePath, " // title
+ "PdfBookmark.RemoteGoTo rGoTo, boolean newWindow)",
PdfAnnot.FLAG_LOCKED, // flag
Color.RED, // annotation rectangle color
PdfLinkAnnot.HIGHLIGHT_MODE_PUSH); // highlight mode
lAnnot9.setShowRect(true);
// Creates a remote Go-To action for navigating to page 2
// of the test PDF file
PdfBookmark.RemoteGoTo remoteBookmark =
PdfLinkAnnot.getRemoteGoToInstance(2);
// Sets the the annotation to performs the remote Go-To action
// on the test PDF file in a new window
lAnnot9.addActionRemoteGoTo(
testFile,
remoteBookmark,
true);
page1.writeText("Display page 2 of "
+ testFile
+ "a new Window",
fontCourier, rectangle);
page1.addAnnotation(lAnnot9);
rectangle = new PdfRect(150, 500, 300, 40);
PdfLinkAnnot lAnnot10 = new PdfLinkAnnot();
lAnnot10.setRect(rectangle);
// Creates a remote Go-To action for navigating to a
// rectangular area specified with reference to the
// bottom-left corner of the test PDF file
remoteBookmark = PdfLinkAnnot.getRemoteGoToInstance(
2, // page
100, 100, 600, 600); // left, bottom, right, and top
lAnnot10.addActionRemoteGoTo(
testFile,
remoteBookmark,
true);;
lAnnot10.setHighlightMode(PdfLinkAnnot.HIGHLIGHT_MODE_PUSH);
page1.writeText(
"Display specified rectangular area on page 2 of "
+ testFile
+ "in a new Window",
fontCourier, rectangle);
page1.addAnnotation(lAnnot10);
rectangle = new PdfRect(150, 550, 300, 40);
PdfLinkAnnot lAnnot11 = new PdfLinkAnnot();
lAnnot11.setRect(rectangle);
// Creates a remote Go-To action for navigating to 50 points
// up from the bottom of page 2 of another PDF file
remoteBookmark = PdfLinkAnnot.getRemoteGoToInstance(
2,
50,
PdfLinkAnnot.FITH);
lAnnot11.addActionRemoteGoTo(
testFile,
remoteBookmark,
true);
page1.writeText(
"Scroll up 50 points from bottom of page2 of "
+ ".\\InputDocs\\test_pdf_file.pdf and zoom the page "
+ "to tightly fit its entire width inside a new window",
fontCourier, rectangle);
page1.addAnnotation(lAnnot11);
rectangle = new PdfRect(150, 600, 300, 40);
PdfLinkAnnot lAnnot12 = new PdfLinkAnnot();
lAnnot12.setRect(rectangle);
// Creates a remote Go-To action for navigating to page 2 of
// the test PDF. Specifies that the page is to be displayed
// with its entire height and width accommodated inside a
// window.
remoteBookmark =
PdfLinkAnnot.getRemoteGoToInstance(2, PdfLinkAnnot.FITB);
lAnnot12.addActionRemoteGoTo(
testFile,
remoteBookmark,
true);
page1.writeText(
"Fit entire width and height of page 2 of "
+ testFile
+ " in a new Window",
fontCourier, rectangle);
page1.addAnnotation(lAnnot12);
rectangle = new PdfRect(150, 650, 300, 40);
PdfLinkAnnot lAnnot13 = new PdfLinkAnnot();
lAnnot13.setRect(rectangle);
// Creates a remote Go-To action for navigating to a
// rectangle that has specified with reference to the
// bottom-left corner of page 2 of another PDF file
remoteBookmark = PdfLinkAnnot.getRemoteGoToInstance(
2,
new PdfRect(200, 200, 100, 100));
lAnnot13.addActionRemoteGoTo(
testFile,
remoteBookmark,
true);
page1.writeText(
"Display rectangle (200, 200, 100, 100) on page 2 of "
+ testFile
+ " in a new Window",
fontCourier, rectangle);
page1.addAnnotation(lAnnot13);
document.add(page1);
document.add(page2);
// Sets the file to be opened after it is written to
document.setOpenAfterSave(true);
// Writes the document object to file
document.write();
// Closes all I/O streams associated with this writer object
writer.dispose();
}
}