How to add hyperlink in pdf using pdfbox

前端 未结 3 496
死守一世寂寞
死守一世寂寞 2020-12-10 03:23

I want to add a hyperlink in PDF created using PDFBOX, such that i click on some text example \'Click here\' will redirect to URL. I tried using PDAnnotat

相关标签:
3条回答
  • 2020-12-10 04:08

    To add to contentStream use the following code

        PDRectangle position = new PDRectangle();
        position.setLowerLeftX(10);
        position.setLowerLeftY(20); 
        position.setUpperRightX(100); 
        position.setUpperRightY(10); 
        txtLink.setRectangle(position);
        page.getAnnotations().add(txtLink);
    
    0 讨论(0)
  • 2020-12-10 04:17

    This is a fully working example, tested with PDFBox 2.0.19:

    import java.awt.Color;
    import java.io.File;
    
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.pdmodel.PDPage;
    import org.apache.pdfbox.pdmodel.PDPageContentStream;
    import org.apache.pdfbox.pdmodel.common.PDRectangle;
    import org.apache.pdfbox.pdmodel.font.PDType1Font;
    import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
    import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
    import org.apache.pdfbox.pdmodel.interactive.action.PDActionURI;
    import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink;
    import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary;
    
    public class MainCreateHyerLink
    {
      public static void main (final String [] args) throws Exception
      {
        try (final PDDocument doc = new PDDocument ())
        {
          final PDPage page = new PDPage (new PDRectangle (250, 150));
          doc.addPage (page);
    
          try (final PDPageContentStream contentStream = new PDPageContentStream (doc, page))
          {
            final PDAnnotationLink txtLink = new PDAnnotationLink ();
    
            // border style
            final PDBorderStyleDictionary linkBorder = new PDBorderStyleDictionary ();
            linkBorder.setStyle (PDBorderStyleDictionary.STYLE_UNDERLINE);
            linkBorder.setWidth (10);
            txtLink.setBorderStyle (linkBorder);
    
            // Border color
            final Color color = Color.GREEN;
            final float [] components = new float [] { color.getRed () / 255f, color.getGreen () / 255f, color.getBlue () / 255f };
            txtLink.setColor (new PDColor (components, PDDeviceRGB.INSTANCE));
    
            // Destination URI
            final PDActionURI action = new PDActionURI ();
            action.setURI ("https://www.helger.com");
            txtLink.setAction (action);
    
            // Position
            final PDRectangle position = new PDRectangle ();
            position.setLowerLeftX (10);
            position.setLowerLeftY (10);
            position.setUpperRightX (200);
            position.setUpperRightY (10 + 2 + 10 + 2);
            txtLink.setRectangle (position);
            page.getAnnotations ().add (txtLink);
    
            // Main page content
            contentStream.beginText ();
            contentStream.newLineAtOffset (12, 12);
            contentStream.setFont (PDType1Font.COURIER_BOLD, 10);
            contentStream.showText ("This is linked to the outside world");
            contentStream.endText ();
          }
        }
      }
    }
    
    0 讨论(0)
  • 2020-12-10 04:21

    There is a library called PDFBox-Layout which makes it easier to add hyperlinks:

    Document document = new Document();
    
    Paragraph paragraph = new Paragraph();
    paragraph.addMarkup(
       "This is a link to {link[https://github.com/ralfstuckert/pdfbox-layout]}PDFBox-Layout{link}",
     18f, BaseFont.Helvetica);
    document.add(paragraph);
    
    final OutputStream outputStream = new FileOutputStream("link.pdf");
    document.save(outputStream);
    
    0 讨论(0)
提交回复
热议问题