2010-02-07 16 views
16

Ich muss einen Link in eine generierte PDF in einer Ruby on Rails App einbetten. Gibt es eine Möglichkeit, dies mit Garnelen zu tun?Kann Garnele PDFs mit Links erzeugen?

Als wir darüber lesen, stellt sich heraus, dass das Krabbenformat die Antwort für eine Weile war, aber 0.7.x hat das kaputt gemacht.

Das Prawn-Format verwendet die Funktion link_annotate(rect, options={}) zum Erstellen von Links. Welche Optionen müssen in diese übergeben werden, um einen Link in der PDF zu erstellen?

edit:
Ich mag würde ein Code Beispiel dafür sehen, getan zu werden, wenn jemand eine hat.

+0

Es wäre viel einfacher sein http zu verwenden://princexml.com/ Zugegeben, ein proprietäres Produkt, obwohl Demo-Verwendung ist in Ordnung. – hendry

Antwort

10

Wenn Sie versuchen, einen Link zu einer externen Seite (http://google.com) zu erstellen, zum Beispiel Sie die folgenden verwenden könnten, einen Link zu setzen, die bei 5, 5 von unten links auf der Seite 100x100 und platziert ist mit einem 1px Grenze:

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

Garnelen-Format würde den Text übergeben an die pdf.text Methode analysieren und HTML-Tags ein finden. Es würde dann reguläre Ausdrücke verwenden, um das Ziel zu analysieren und Text zu verknüpfen und schließlich einen Link wie den oben genannten mit einem Begrenzungsrahmen (dem ersten Parameter) zu erstellen, der um den Text passen würde, der innerhalb der Tags war. Ich bin mir nicht sicher, wie Sie das ohne das Prawn Format erreichen könnten. Aber so können Sie einen Link mit link_annotation erstellen.

+0

Ihre Erklärung der Positionsparameter ist falsch.Die korrekte Bedeutung von [100, 100, 5, 5] ist [rechtsEdgeX, bottomEdgeY, leftEdgeX, topEdgeY]. Obwohl dies nicht gültig sein sollte, druckt es eine Box wie erwartet aus. Aber probiere [100,100,100,100] aus und es wird kein erwartetes Ergebnis ausgegeben. Ausprobiert und getestet. Es ist seltsam, dass diese Informationen nicht einfach zugänglich sind, nicht einmal in der PDF-Spezifikation http://partners.adobe.com/public/developer/en/pdf/PDFReference.pdf – Cristian

+0

Für 'Garnelen 1.0.0' verwende ich diese' link_annotation ([100, 100, 5, 5],: Rand => [0,0,1],: A => {: Typ =>: Aktion,: S =>: URI,: URI => PDF :: Core :: LiteralString.new ("http://google.com")}) ' – Selvamani

1

Ab Garnelen 0,7, Garnelen-Format ist völlig ungestützt und wird nicht Arbeit mit Versionen von Garnelen 0.7+. Fühlen Sie sich frei gabeln und zu beheben, natürlich - Garnelen-Format der Homepage auf Github

Die andere Option ist Garnele ist in Low-Level-Annotation Unterstützung gebaut zu verwenden: http://prawn.majesticseacreature.com/docs/prawn-core/classes/Prawn/Document/Annotations.html#M000158

Heres die Methode:

link_annotation (rect, options = {})

Eine bequeme Methode zum Erstellen von 01 Link-Anmerkungen. rect muss ein Array von vier Zahlen sein, die die Grenzen der Annotation beschreiben. Die Optionen Hash sollte entweder enthalten: Dest (beschreibt das Ziel Ziel, in der Regel als eine Zeichenfolge, die in dem Dokument des Dests Baum aufgezeichnet worden ist), oder: A (beschreibt eine Aktion ausführen auf Klicken auf den Link) oder: PA (zum Beschreiben einer URL, auf die verlinkt werden soll).

+0

Wissen Sie, wie Sie diese link_annotation-Funktion verwenden? Wenn ja, wäre ein Beispiel nützlich. – lillq

19

Ich weiß, dass dies eine alte Frage, aber für diejenigen, die noch auf sie stolpern, in aktuellen Versionen von Garnelen, können Sie Inline-Format wie folgt verwenden:

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