Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can prawn generate PDFs with links?

I need to embed a link into a generated pdf in a ruby on rails app. Is there a way to do this with prawn?

Reading about this it turns out that prawn-format was the answer for awhile, but 0.7.x broke this.

prawn-format uses the link_annotate(rect, options={}) function to create links. What options need to be passed into this to get it to create a link in the PDF?

edit:
I would like to see a code example of this being done if anyone has one.

like image 893
lillq Avatar asked Feb 07 '10 05:02

lillq


3 Answers

I know this is an old question, but for those still stumbling upon it, in current versions of Prawn, you can use inline format like this:

pdf.text "Website: <link href='http://www.stackoverflow.com'>stackoverflow</link>", :inline_format => true
like image 118
Nathan Avatar answered Nov 14 '22 19:11

Nathan


If you are attempting to create a link to an external page (http://google.com), for instance you could use the following, to place a link that is 100x100 and placed at 5, 5 from the bottom left of the page, with a 1px border:

pdf.link_annotation([100, 100, 5, 5], :Border => [0,0,1], :A => { :Type => :Action, :S => :URI, :URI => Prawn::LiteralString.new("http://google.com") } )

Prawn Format would parse the text passed to the pdf.text method and find html a tags. It would then use regular expressions to parse out the target and link text and finally create a link like the one above with a bounding box (the first param) that would fit around the text that was within the tags. I'm not sure how you could achieve this without Prawn Format. But that is how you can create a link using link_annotation.

like image 11
Chas Lemley Avatar answered Nov 14 '22 18:11

Chas Lemley


As of Prawn 0.7, prawn-format is completely unsupported, and will not work with versions of Prawn 0.7+. Feel free to fork and fix, of course - prawn-format's homepage on github

The other option is to use prawn's built in low-level annotation support: http://prawn.majesticseacreature.com/docs/prawn-core/classes/Prawn/Document/Annotations.html#M000158

Heres the method:

link_annotation(rect, options={})

A convenience method for creating Link annotations. rect must be an array of four numbers, describing the bounds of the annotation. The options hash should include either :Dest (describing the target destination, usually as a string that has been recorded in the document‘s Dests tree), or :A (describing an action to perform on clicking the link), or :PA (for describing a URL to link to).

like image 1
Gazza Avatar answered Nov 14 '22 19:11

Gazza