大虾可以生成带链接的PDF吗?

发布于 2024-08-20 17:12:03 字数 269 浏览 9 评论 0原文

我需要将链接嵌入到 Ruby on Rails 应用程序中生成的 pdf 中。有没有办法用虾来做这个?

读到这篇文章后发现,prawn-format 曾一度是答案,但 0.7.x 打破了这一点。

prawn-format 使用 link_annotate(rect, options={}) 函数创建链接。需要传递哪些选项才能使其在 PDF 中创建链接?

编辑:
如果有人有的话,我希望看到一个代码示例。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

骄兵必败 2024-08-27 17:12:03

我知道这是一个老问题,但对于那些仍然遇到这个问题的人来说,在当前版本的 Prawn 中,您可以使用内联格式,如下所示:

pdf.text 'Website: <color rgb="0000FF"><u><link href="http://www.stackoverflow.com">stackoverflow</link></u></color>', :inline_format => true

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: <color rgb="0000FF"><u><link href="http://www.stackoverflow.com">stackoverflow</link></u></color>', :inline_format => true
乞讨 2024-08-27 17:12:03

例如,如果您尝试创建指向外部页面 (http://google.com) 的链接,则可以使用下面,放置一个 100x100 的链接,放置在距离页面左下角 5, 5 处,边框为 1px:

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 将解析传递给 pdf.text 方法的文本并查找 html a 标签。然后,它将使用正则表达式来解析目标和链接文本,最后创建一个像上面的链接一样的链接,其中包含一个适合标签内文本的边框(第一个参数)。我不确定如果没有 Prawn Format 如何实现这一点。但这就是使用 link_annotation 创建链接的方法。

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.

耀眼的星火 2024-08-27 17:12:03

从 Prawn 0.7 开始,prawn-format 为
完全不受支持,并且不会
适用于 Prawn 0.7+ 版本。感觉
当然可以自由分叉和修复

- prawn-format 的 github 主页

另一种选择是使用 prawn 内置的低级注释支持:
http://prawn.majesticeacreature.com/ docs/prawn-core/classes/Prawn/Document/Annotations.html#M000158

方法如下:

link_annotation(矩形,选项={})

创建链接的便捷方法
注释。矩形必须是一个数组
四个数字,描述了范围
注释。选项哈希
应包括:Dest
(描述目标目的地,
通常作为一个字符串
记录在文档的 Dests 中
树),或:A(描述一个动作
单击链接即可执行),或 :PA
(用于描述要链接到的 URL)。

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).

踏雪无痕 2024-08-27 17:12:03

我最近这样做了 - 效果很好:

      formatted_text_box([{:text=>"Google", :link=>"https://google.com", :color=>"0000ee"}])

I recently did it like this - works great:

      formatted_text_box([{:text=>"Google", :link=>"https://google.com", :color=>"0000ee"}])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文