3 votes

Prawn produit une page blanche lors de la génération de PDF à partir d'images

Je tente de générer un PDF à partir d'un répertoire contenant une multitude d'images en utilisant Prawn. Le code que j'ai jusqu'à présent fonctionne parfaitement, avec seulement un petit problème, il insère une page vierge au début du PDF.

Puisque je ne connais pas nécessairement les tailles des images (autres que d'être à peu près les mêmes, +/- 50 pixels dans chaque dimension), j'utilise RMagick pour obtenir les dimensions maximales des images dans le répertoire afin de les centrer sur chaque page avec un peu de marge.

Voici le code réduit aux étapes nécessaires pour reproduire ce comportement :

require 'rmagick'
require 'prawn'

# Les fichiers de page ont toujours un nom sous la forme 'page_#.jpg'
pages = Dir.glob('*.jpg').sort_by { |file| file.split('_')[1].to_i }

# Il y a probablement une meilleure façon de faire cette partie, mais la façon naïve fonctionne très bien, peu importe...
largeurs = Array.new

hauteurs = Array.new

pages.each do |page|
  image = Magick::Image::read(page).first

  largeurs << image.columns

  hauteurs << image.rows
end

Prawn::Document.generate('test.pdf', :page_size => [largeurs.max + 36, hauteurs.max + 36]) do |pdf|
  pages.each do |page|
    pdf.image page, :position => :center, :vposition => :center
  end
end

C'est la première fois que je fais vraiment quelque chose avec Prawn, donc il y a probablement quelque chose de simple que je suis en train de manquer.

Si cela compte; j'utilise Ruby 1.9.3-p327 et Prawn 0.12.0.

0voto

seaneshbaugh Points 510

Il semble que tout ce qui causait ce problème a été réparé. Utiliser le même code que ci-dessus avec Prawn 1.1.0 ne produit pas une page blanche avant les autres pages.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X