2012-01-04 14 views
6

Sto usando gamberetti gemma per generare report in formato PDF,rotaie 3 + gamberi pdf + html_safe

@user.description returns as string "<b>sample text</b> &nspb; <p>sample text</p>" 

mentre aggiungendo valori alla tabella pdf

pdftable = Prawn::Document.new 
pdftable.table([["#{@user.description}"]], 
     :column_widths => {0 => 50, 1 => 60, 2 => 280, }, :row_colors => ["ffffff"]) 

in questo caso ha generato PDF ha contenuto con html tag, anche se ho provato ad applicare html_safe ma non sta sfuggendo tag.

è possibile utilizzare/applicare html_safe all'interno di prawn pdftable, per sfuggire ai tag html?

+0

Cosa sta rivelando nel PDF, esattamente, e cosa vuoi di presentarsi invece? –

+0

in pdf suo presentarsi "testo di esempio &nspb;

testo di esempio

", invece dovrebbe essere solo il testo vale a dire "testo di esempio Testo di esempio", html_safe deve essere applicato – lamrin

+0

Ci dispiace, ma non è quello che 'html_safe' fa - è semplicemente dice a Rails che la stringa non deve essere sfuggita quando usata in una vista. Dai un'occhiata a [questa domanda] (http://stackoverflow.com/questions/7414267/strip-html-from-string-ruby-on-rails) per una soluzione. –

risposta

5

Ancora una volta, html_safe non è il metodo da utilizzare; non fa quello che pensi che faccia. Tutto lo html_safe è contrassegnare la stringa come sicura, indicando in tal modo a Rails che non è necessario evitarla in una vista. Quando si usa Prawn non avrebbe alcun effetto.

quello che suona come si vuole fare non è fuga HTML, ma striscia tag HTML dalla stringa. Rails ha un disinfettante HTML in ActionView::Helpers::SanitizeHelper, ma per impostazione predefinita consente determinati tag; puoi disattivare questo comportamento usando l'attributo tags.

class MyClass 
    include ActionView::Helpers::SanitizeHelper 

    def remove_html(string) 
    sanitize(string, :tags => {}) # empty tags hash tells it to allow no tags 
    end 
end 

obj = MyClass.new 
obj.remove_html "<b>sample text</b> &nspb; <p>sample text</p>" 
=> "sample text &nspb; sample text" 

Puoi include ActionView::Helpers::SanitizeHelper nel controller per ottenere l'accesso al metodo sanitize.

Si noti che lo &nbsp; è ancora nella stringa; se si desidera rimuovere queste entità HTML, è necessario utilizzare un altro metodo; il HTMLEntities gem è uno di questi metodi:

[1] pry(main)> require 'htmlentities' 
=> true 
[2] pry(main)> coder = HTMLEntities.new 
=> #<HTMLEntities:0x007fb1c126a910 @flavor="xhtml1"> 
[3] pry(main)> string = "sample text &nbsp; sample text" 
=> "sample text &nbsp; sample text" 
[4] pry(main)> coder.decode string 
=> "sample text   sample text" 

(notare che nel tuo esempio, il testo dice &nspb; invece di &nbsp;).

+0

Grazie mille, mi ha aiutato in misura limitata, ma ancora alcuni dei tag generati da uno degli editor HTML di Tinymce, non vengono convertiti al testo attuale con htmlentities, ma funziona molto bene quando utilizzo raw o htnm_safe nella vista. – lamrin

2

se siete alla ricerca di un modo per utilizzare il formato in linea di gamberi di quanto si potrebbe anche fare come segue:

pdftable = Prawn::Document.new 
cell = make_cell(content: "#{@user.description}", inline_format: true) 
pdftable.table([[cell]]) 
+0

ho usato questa risposta ma stavo eseguendo il rendering in una vista e quindi ho dovuto usare 'pdf.make_cell (...)' – daslicious

Problemi correlati