2012-01-04 11 views
6

estoy usando joya de gambas para generar informes en PDF,carriles 3 + gambas pdf + html_safe

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

mientras añadiendo los valores de la tabla pdf

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

en este caso genera pdf tiene contenido con HTML etiquetas, incluso traté de aplicar html_safe pero no está escapando etiquetas.

¿es posible usar/aplicar html_safe dentro de gambas pdftable, para poder escapar de las etiquetas html?

+0

Lo que está apareciendo en el PDF, exactamente, y qué es lo que quieren aparecer en su lugar? –

+0

en su pdf a aparecer "texto de ejemplo &nspb;

muestra de texto

", sino que debe ser sólo de texto es decir, "Texto de la muestra de la muestra de texto", html_safe debe aplicarse – lamrin

+0

siento, pero eso no es lo que hace 'html_safe' - se simplemente le dice a Rails que la cadena no se debe escapar cuando se usa en una vista. Consulte [esta pregunta] (http://stackoverflow.com/questions/7414267/strip-html-from-string-ruby-on-rails) para obtener una solución. –

Respuesta

5

Una vez más, html_safe no es el método que debe utilizar; no hace lo que crees que hace. Todo lo que html_safe hace es marcar la cadena como segura, lo que le indica a Rails que no necesita escapar de ella en una vista. Al usar gambas no tendría ningún efecto.

Lo que suena como que quiere hacer no es de escape HTML, pero tira de etiquetas HTML de la cadena. Rails tiene un desinfectante HTML en ActionView::Helpers::SanitizeHelper, pero de forma predeterminada permite ciertas etiquetas; puede desactivar este comportamiento utilizando el atributo 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" 

Puede include ActionView::Helpers::SanitizeHelper en su controlador para obtener acceso al método sanitize.

Tenga en cuenta que &nbsp; todavía está en la cadena; si desea eliminar estas entidades HTML, deberá usar algún otro método; la HTMLEntities gem es uno de esos métodos:

[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" 

(tenga en cuenta que en su ejemplo, el texto dice &nspb; en lugar de &nbsp;).

+0

Muchas gracias, me ayudó en cierta medida, pero todavía algunas de las etiquetas generadas por uno de los editores de HTML Tinymce, no se están convirtiendo al texto real con htmlentities. Pero funciona realmente bien cuando uso raw o htnm_safe en la Vista. – lamrin

2

Si están buscando una manera de utilizar el formato de línea de gambas que también se puede hacer de la siguiente manera:

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

utilicé esta respuesta pero estaba representando en una vista y por lo tanto tuve que usar 'pdf.make_cell (...)' – daslicious