Question

Je pied de page texte peut être plus d'une ligne, la longueur du texte varie en fonction du nom de l'utilisateur et l'entreprise où ils travaillent. Comme tous les pieds de page, il doit être affiché en dessous du bas du document lié afin qu'il ne soit pas mêlé avec le contenu principal du PDF.

Le problème est que la seule raison pour laquelle j'ai trouvé dans Prawn pour obtenir le texte imprimé ci-dessous lié le fond du document est à l'aide #draw_text. Ceci est la même méthode que number_pages utilise pour obtenir le texte à apparaître en dessous du bas du document lié. Cependant, l'une mise en garde de l'utilisation #draw_text semble être son incapacité à envelopper le texte à une deuxième ligne.

J'ai trouvé de nombreuses méthodes qui me permettent d'envelopper le texte à une deuxième ligne, comme #text_box, #bounding_box, etc., mais la mise en garde de ces méthodes est qu'ils ne vous permettent pas d'imprimer quoi que ce soit en dessous du bas est lié le document .

Par exemple, ce qui suit ne rien imprimer sur le document parce qu'il serait en dessous du fond du document lié:

text_box "Generated by Tom Cruise for Universal Studios", :at => [bounds.left, 0], :width => 200

Ce qui suit n'imprime sur le document parce qu'il est dans le fond du document lié, mais sera également imprimé au-dessus de tout contenu qui existe déjà:

text_box "Generated by Tom Cruise for Universal Studios", :at => [bounds.left, bounds.bottom - 20], :width => 200

Et enfin ce qui suit imprimera ci-dessous le fond du document relié veillant à ce qu'il ne soit pas imprimé au-dessus de tout contenu existant dans le PDF, mais il n'y a pas disponible: l'option largeur ou la possibilité d'avoir l'enveloppe de texte à une seconde ligne si nécessaire:

draw_text "Generated by Tom Cruise for Universal Studios", :at => [bounds.left, 0]

Y at-il un moyen d'obtenir le meilleur des deux mondes? Une façon d'imprimer en dessous du bas du document lié et de faire respecter une largeur maximale de la ligne avec emballage?

Était-ce utile?

La solution 2

Je fini par écrire ma propre petite routine pour gérer plusieurs lignes dans le pied de page. Ce serait bien si Prawn a soutenu quelque chose comme ceci hors de la boîte, je suis encore un peu mystifié pourquoi certaines choses ne peuvent pas être affichés en dessous du fond lié tandis que d'autres choses peuvent être. Il serait également bien si tous les différents types de méthodes de texte pris en charge l': attribut width avec ligne ... emballage mais je digression, voici le code que je fini par utiliser:

line_wrapper = Prawn::Core::Text::LineWrap.new

repeat :all do
  str = "Generated on " + Time.zone.now.strftime("%m/%d/%y at %I:%M:%S %p %Z") + " by #{user.full_name} at #{user.company.name}"
  starting_position = 0
  while !str.blank?
    single_line = line_wrapper.wrap_line(str, :width => 470, :document => pdf)
    draw_text(single_line, :at => [bounds.left, starting_position])
    starting_position -= 10
    str.slice!(single_line)
  end
end

Autres conseils

Je suppose que vous aurez besoin de faire la ligne d'emballage manuellement (par exemple calculer quand la pause).

Mais je suis en mesure d'obtenir un pied de page sur plusieurs lignes en utilisant la méthode standard number_pages et les éléments suivants:

pdf.number_pages "Copyright #{Time.now.year} Company.", [pdf.bounds.left, 0]
pdf.number_pages "Profile generated on #{Time.now.strftime('%B %d, %Y')}.", [pdf.bounds.left, 10]

Est-ce ce que vous cherchez?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top