2010-08-03 18 views
1

J'utilise Prawn PDF pour créer des fichiers PDF à la volée dans mon application Rails.Crevettes PDF et cellules de base de données vides?

Je suis récemment tombé sur la fonction cell.blank? de rails, qui s'est avéré être très pratique, je peux cacher <li> lignes je veux s'il n'y a rien à afficher - quelque chose que je me demandais depuis un moment!

Est-il possible de faire la même chose dans la crevette? Masquer une ligne si elle est vide?

Au moment si je donne les résultats suivants:

Contact Name 
Address Line 1 
Address Line 2 
Address Line 3 
Postcode 
Phone Number 
Fax Number 

Si, par exemple, l'utilisateur ne est entré le nom du contact et le code postal il y aurait un écart important où 1 de la ligne d'adresse, 2 et 3 devraient être.

Si je pouvais ignorer ces lignes parce qu'ils sont vides et l'afficher comme:

Contact Name 
Postcode 

ce serait ranger mon PDF et enregistrez l'utilisateur d'avoir à utiliser le champ incorrect pour assurer que l'adresse regarde droit dans la PDF

C'est ce que mon code Prawn ressemble:

pdf.text_box "Client", :size => 9, :at => [50,673] 
    pdf.text_box "#{@kase.company.companyname}", :size => 9, :at => [100,673] 
    pdf.text_box "#{@kase.company.companyaddressline1}", :size => 9, :at => [100,665] 
    pdf.text_box "#{@kase.company.companyaddressline2}", :size => 9, :at => [100,655] 
    pdf.text_box "#{@kase.company.companyaddressline3}", :size => 9, :at => [100,645] 
    pdf.text_box "#{@kase.company.companyaddresscity}", :size => 9, :at => [100,635] 
    pdf.text_box "#{@kase.company.companyaddresspostcode}", :size => 9, :at => [100,625] 

J'ai cherché le site du groupe d'utilisateurs Prawn google mais ne peut pas sembler trouver ce que je dois.

Merci d'avance!

Danny

Répondre

1

pdf cadre de sélection (sans vergogne tirée de la documentation crevette).

pdf.bounding_box([100,400], :width => 400) do 
    pdf.text("The height of this box is #{pdf.bounds.height}") 
    pdf.text('this is some text') 
    pdf.text('this is some more text') 
    pdf.text('and finally a bit more') 
    pdf.text("Now the height of this box is #{pdf.bounds.height}") 
    end 

peut être facilement modifié pour imprimer si l'attribut est disponible.

0

utilisation d'un compteur pour la coordonnée y de la ligne d'adresse en cours. Si vous ajoutez une ligne, diminuez-la de 10. Si votre ligne est vide, ne l'ajoutez pas et n'augmentez pas la coordonnée y.

y = 673 
if @line1 then 
    pdf.text_box "#{@line1}", :size => 9, :at => [100,y] 
    y+= 10 
end 
if @line2 then 
    pdf.text_box "#{@line2}", :size => 9, :at => [100,y] 
    y+= 10 
end 

(indice: si cela fonctionne comme vous le souhaitez - factoriser dans une fonction qui ajoute la ligne et augmente votre compteur)

+0

Salut, serait-ce aller directement dans le fichier prawn.pdf, où je le « pdf.text_box »? Merci, Danny – dannymcc

0

Vous devriez pouvoir utiliser Ruby "vide? méthode, qui est disponible pour la plupart des structures de données et des chaînes afin de déterminer si votre chaîne ou structure de données contient du contenu. Quelque chose comme (je ne sais pas bien que gambas, mais ce nom de l'entreprise ressemble à ce serait une chaîne, donc je ne pense pas que vous auriez besoin de le jeter):

pdf.text_box @kase.company.companyname, :size => 9, :at => [100,673] unless @kase.company.companyname.empty? 

bien sûr, vous pouvez faire ce dans une méthode d'aide

def my_text_box (var, x, y) 
    pdf.text_box var, :size => 9, :at => [x,y] if unless var.empty? 
end 

et appeler dans votre document de crevette rose

my_text_box @kase.company.companyname, 100, 673 

oops, a oublié d'ajouter l'arbitre pour vider? http://apidock.com/ruby/String/empty%3F

+0

Je suppose que je n'ai pas vraiment abordé la façon d'éviter les lignes vides. Vous pouvez regarder les options de crevettes pdf_text_box, je pense que vous pouvez fournir une hauteur par défaut, vous devez wouln't spécifier l'emplacement y de chaque crevette rose boîte serait tout simplement l'ajouter dans. http://prawn.majesticseacreature.com /docs/0.8.4/prawn-core/Prawn/Text/Box.html –

+0

Salut comme vous dites cela ne marche pas supprimer les lignes vides - il ne suffit pas d'afficher le contenu s'il n'y en a pas. Ce qui arrive de toute façon. J'ai regardé la documentation de pdf_text_box mais cela ne semble pas mentionner les lignes cachées. – dannymcc

+0

vous avez raison, je pensais à la bounding_box, pas le text_box. si vous ne donnez pas la boîte englobante une hauteur spécifique, il sera étendu à adapter, http://prawn.majesticseacreature.com/docs/0.8.4/prawn-core/Prawn/Document.html#method-i-bounding_box (édité et ajouté comme réponse ci-dessous - pas de coloration syntaxique dans le commentaire) –