2010-02-07 11 views
16

Muszę umieścić link w wygenerowanym pliku pdf w aplikacji Ruby on rails. Czy jest jakiś sposób, aby to zrobić z krewetką?Czy krewetki mogą generować pliki PDF z łączami?

Czytając o tym okazało się, że format prawdy był odpowiedzią na chwilę, ale 0.7.x zepsuł to.

Krewetka-format używa funkcji link_annotate(rect, options={}) do tworzenia linków. Jakie opcje należy przekazać, aby utworzyć łącze w pliku PDF?

edit:
Chciałbym zobaczyć przykład kod jest wykonywane, jeśli ktoś ma.

+0

Byłoby znacznie prostsze w użyciu http://princexml.com/ Niewątpliwie zastrzeżony produkt, chociaż używanie wersji demonstracyjnej jest w porządku. – hendry

Odpowiedz

10

Jeśli próbujesz stworzyć link do strony zewnętrznej (http://google.com), na przykład, można użyć następujących, aby umieścić link, który jest 100x100 i umieszczony na 5, 5 z lewej dolnej strony z obramowaniem 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 byłoby zanalizować tekst przekazany do metody pdf.text i znaleźć html tagi. Następnie używałby wyrażeń regularnych do analizowania tekstu docelowego i linku, a następnie utworzenia łącza podobnego do powyższego z ramką ograniczającą (pierwszy parametr), który pasowałby do tekstu znajdującego się w tagach. Nie jestem pewien, jak można to osiągnąć bez formatu Prawn. Ale w ten sposób można utworzyć łącze za pomocą opcji link_annotation.

+0

Twoje wyjaśnienie parametrów pozycji jest nieprawidłowe.Prawidłowe znaczenie [100, 100, 5, 5] to [rightEdgeX, bottomEdgeY, leftEdgeX, topEdgeY]. Chociaż nie powinno to być poprawne, wydrukuje pole zgodnie z oczekiwaniami. Ale wypróbuj [100, 100,100,100] i nie wydrukuje spodziewanego wyniku. Wypróbowany i przetestowany. To dziwne, że ta informacja nie jest łatwo dostępna, nawet w specyfikacji PDF http://partners.adobe.com/public/developer/en/pdf/PDFReference.pdf – Cristian

+0

Dla 'krewna 1.0.0' używam tego' link_annotation ([100, 100, 5, 5],: Border => [0,0,1],: A => {: Type =>: Action,: S =>: URI,: URI => PDF :: Core :: LiteralString.new ("http://google.com")}) ' – Selvamani

1

Na krewetka 0,7, krewetka, format zupełnie niepodparta i nie będzie pracy z wersji Prawn 0.7+. Poczuj swobodnie widelec i naprawić, oczywiście - Strona krewetka formatu w sprawie github

Inną opcją jest użycie krewetka wbudowanego w niskiego poziomu wsparcia adnotacji: http://prawn.majesticseacreature.com/docs/prawn-core/classes/Prawn/Document/Annotations.html#M000158

Herezje metody:

link_annotation (rect opcje = {})

Sposób wygoda tworzenia Łącze adnotacje. rect musi być tablicą z czterema liczbami, opisującymi granice adnotacji. Opcje mieszania powinien zawierać: Doc (opisujący miejsce docelowe, zwykle jako ciąg znaków, który został nagrany w DESTS dokumentu za drzew), czyli A (opisujący działania do wykonać na kliknięcie linku) lub: PA (w celu opisania adresu URL, do którego ma prowadzić link).

+0

Czy wiesz, jak korzystać z tej funkcji link_annotation? Jeśli tak, przydatny byłby przykład. – lillq

19

wiem, jest to stara sprawa, ale dla tych, którzy wciąż natrafiają na to, w obecnych wersjach Krewetka, można użyć formatu inline tak:

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