Comment modifier ou écrire sur PDF existant avec Ruby?

j'ai quelques fichiers PDF avec un contenu complexe et plusieurs régions/zones vierges. J'ai besoin d'être capable d'écrire du texte dans ces régions vierges et de sauvegarder les fichiers PDF résultants dans un dossier.

j'ai cherché sur Google des réponses à cette question de manière très intensive, mais je n'ai pas trouvé de réponses définitives. Une des meilleures solutions est PDF::Toolkit , mais il faudrait l'achat D'Adobe Acrobat pour ajouter des attributs remplaçables aux attributs existants Les documents PDF.

le monde PHP est béni avec FPDI qui peut être utilisé pour simplement ouvrir un fichier PDF et écrire/dessiner sur elle sur le contenu existant. Il ya un port Rubis de cette bibliothèque , mais le dernier commit pour cela s'est produit au début de 2009. En outre, ce projet ne semble pas être largement utilisé et soutenu.

la question Est: Quelle est la meilleure façon de Ruby éditer, écrire ou dessiner sur des PDF existants?

Cette question ne semble pas être répondues ici. Ces questions sont liées, mais pas vraiment les mêmes:

27
demandé sur Community 2012-02-08 03:58:23

6 réponses

vous devez absolument vérifier Crevette gem, par lequel vous pouvez générer tous les fichiers pdf. Vous pouvez en fait utiliser prawn pour écrire dans le texte dans les PDF existants en traitant le PDF existant comme un modèle pour votre nouveau document de Prawn.

par exemple:

filename = "#{Prawn::DATADIR}/pdfs/multipage_template.pdf"
Prawn::Document.generate("full_template.pdf", :template => filename) do
  text "THis content is written on the first page of the template", :align => :center
end

ceci écrira le texte sur la première page de l'ancien pdf.

voir plus ici: http://prawn.majesticseacreature.com/manual.pdf

27
répondu Said Kaldybaev 2012-06-23 02:43:12

depuis Prawn a supprimé la fonctionnalité de modèle (il était plein de bogues) la façon la plus facile que j'ai trouvé est la suivante:

  1. utilisez Prawn pour générer un PDF avec seulement les parties dynamiques que vous voulez ajouter.
  2. Utiliser PDF::boîte à outils (qui s'enroule PDFtk ) pour combiner les Crevettes en PDF avec l'original.

Rough Exemple:

require 'prawn'
require 'pdf/toolkit'

template_file = 'some/dir/Awesome-Graphics.pdf'
prawn_file = 'temp.pdf'
output_file = 'output.pdf'

Prawn::Document.generate(prawn_file) do
  # Generate whatever you want here.
  text_box "This is some new text!", :at => [100, 300]
end

PDF::Toolkit.pdftk(prawn_file, "background", template_file, "output", output_file)
16
répondu Marc L 2015-05-18 23:39:26

je recommande prawn pour générer des PDF et utiliser ensuite combine_pdf pour combiner deux PDF générés ensemble en un seul. Je l'utilise comme ça, et il fonctionne très bien.

bref exemple (tiré du README) de la façon de combiner deux PDF:

company_logo = CombinePDF.load("company_logo.pdf").pages[0]
pdf = CombinePDF.load "content_file.pdf"
pdf.pages.each { |page| page << company_logo } # notice the << operator is on a page and not a PDF object.
pdf.save "content_with_logo.pdf"
13
répondu Paweł Gościcki 2015-09-21 13:19:20

Le mieux que je peux penser à est de Rails-latex , il ne vous permettra pas de modifier des fichiers PDF, mais il vous permettra de configurer modèle *.tex.erb que vous pouvez modifier dynamiquement et compiler en format PDF (avec dvi et un certain nombre d'autres).

1
répondu rudolph9 2012-02-09 05:32:16

PDFLib semble faire la chose que vous voulez et a des reliures rubis.

1
répondu Joel Meador 2012-02-09 07:02:52

selon mes recherches, la crevette est l'un des joyaux libres et meilleurs que j'ai trouvé. La fonctionnalité de modèle ne fonctionne pas dans la version ultérieure. La dernière version que j'ai pu trouver pour travailler avec templates est 1.0.0.rc2-1 mars 2013. Je n'ai trouvé aucune version ultérieure qui fonctionne avec des modèles. Soyez donc attentif si vous utilisez des versions plus tardives que celle-ci. Découvrez ci-dessous thread pour plus d'info.

https://groups.google.com/forum/#!searchin crevette-ruby/crevette $ 20templates / prawn-ruby / RYGPImNcR0I / 7mxtnrEDHeQJ 151910920"

PDFtk est un autre outil capable de manipulation PDF et de travailler avec des gabarits. Mais il mentionne les points suivants,

  • cette bibliothèque est gratuite pour un usage personnel, mais nécessite une licence si elle est utilisée en production
  • C'est un non-ruby outil de ligne de commande

pour plus d'information veuillez consulter le lien ci-dessous http://adamalbrecht.com/2014/01/31/pre-filling-pdf-form-templates-in-ruby-on-rails-with-pdftk /

0
répondu SajithP 2015-10-12 05:17:19