NicuVlad
NicuVlad

Reputation: 2611

Add hyperlink to pdf files using pdfbox

I need to create a small tool that adds a hyperlink on the first page of a PDF file. I'm using Apache PDFBox to read the pdf files.

Any ideas how to add a hyperlink on a page using this library?

I found this question: how to set hyperlink in content using pdfbox, but this doesn't work.

I just want to add a hyperlink on the first page of a pdf file.

File file = new File(filename);
PDDocument doc = PDDocument.load(file);

PDPage page = doc.getPage(0);
...

I have at least 2 problems with the solution that I found on this question:

  1. The method drawString(String) in the type PDPageContentStream is not applicable for the arguments (PDAnnotationLink)

  2. colourBlue is not initialized

I would prefer to add the hyperlink at the bottom of the page with the URL centered. But for the moment any suggestion will help

Upvotes: 1

Views: 2893

Answers (1)

LoolKovsky
LoolKovsky

Reputation: 1058

First of all, you need to create a PDAnnotationLink like this:

PDAnnotationLink link = new PDAnnotationLink(); 

The link should have an action:

PDActionURI actionURI = new PDActionURI();
actionUri.setURI("http://www.Google.com"); 
link.setAction(action);

Finally, you need to define a rectangle at the desired position and finally add the link to the page's annotations.

PDRectangle pdRectangle = new PDRectangle();

pdRectangle.setLowerLeftX(...);
pdRectangle.setLowerLeftY(...);

pdRectangle.setUpperRightX(...);
pdRectangle.setUpperRightY(...);

link.setRectangle(pdRectangle);

page.getAnnotations().add(link);

If you want you can also add an underline for the link by calling the setBorderStyle(...) methid.

Hope this works for you !

If you want to add some text, then you need to create a PDPageContentStream like this:

PDPageContentStream contentStream = new PDPageContentStream(doc,  page);
contentStream.beginText();
contentStream.newLineAtOffset(..., ...);
contentStream.showText(...);
contentStream.endText();
contentStream.close();

The newLineAtOffset(..., ...) method is used for positioning the text at the desired location.

P.S. Sorry for the bad indentation but it is pretty hard to write on the mobile. If you need any further help you can even write me a private message in Romanian.

Upvotes: 3

Related Questions