web-dev-qa-db-ja.com

Rubyで既存のPDFを編集または書き込む方法は?

いくつかのPDF複雑なコンテンツといくつかの空白の領域/領域を含むテンプレートファイルがあります。これらの空白の領域にテキストを書き込み、結果のPDFをフォルダーに保存できる必要があります。

私はこの質問に対する回答をかなり集中的に探しましたが、明確な回答は見つかりませんでした。より優れたソリューションの1つは PDF :: Toolkit ですが、既存のPDFドキュメントに置換可能な属性を追加するには、Adobe Acrobatを購入する必要があります。

PHP世界は [〜#〜] fpdi [〜#〜] に恵まれており、PDF =既存のコンテンツを上書きしてファイルに書き込み/描画します このライブラリのRubyポート がありますが、最後のコミットは2009年の初めに行われました。また、このプロジェクトは広く使用され、サポートされています。

質問は次のとおりです:既存のPDFを編集、書き込み、または描画するためのより良い方法はRuby何ですか?

この質問についても、ここでは答えられていないようです。これらの質問は関連していますが、実際には同じではありません。

37
Alex Kovshovik

あなたは間違いなくチェックアウトする必要があります Prawn gem。これにより、カスタムpdfファイルを生成できます。既存のPDFを新しいエビドキュメントのテンプレートとして扱うことにより、エビを使用して既存のPDFにテキストを書き込むことができます。

例えば:

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

これは、古いPDFの最初のページにテキストを書き込みます。

詳細はこちら: http://prawn.majesticseacreature.com/manual.pdf

31
Said Kaldybaev

Prawn はテンプレート機能を削除したため(バグが多かったため)、私が見つけた最も簡単な方法は次のとおりです。

  1. エビ を使用して、追加する動的パーツのみを含むPDFを生成します。
  2. PDF :: Toolkit (これは PDFtk をラップします)を使用してエビを結合しますPDFをオリジナルと組み合わせます。

大まかな例:

require 'prawn'
require 'pdf/toolkit'

template_filename = 'some/dir/Awesome-Graphics.pdf'
prawn_filename = 'temp.pdf'
output_filename = 'output.pdf'

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

PDF::Toolkit.pdftk(prawn_filename, "background", template_filename, "output", output_filename)
21
Marc L

PDFの生成には prawn を使用し、次に combine_pdf を使用して、2つの生成されたPDFを1つに結合することをお勧めします。私はそれをこのように使用し、それはうまくいきます。

2つのPDFを結合する方法の短い例(READMEから):

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

宝石を組み合わせて使用​​する必要はなく、1つの宝石だけを使用できます。

RubyやRailsでPDFを使用するのは非常に困難です(そのため、気づきました!)

これは私がテキストを動的にPDF Railsに追加することができた方法です。

このgemをgemファイルに追加しますgem combine_pdf

そして、あなたはこのようなコードを使うことができます:

# get the record from the database to add dynamically to the pdf
user = User.last

# get the existing pdf
pdf = CombinePDF.load "#{Rails.root}/public/pdf/existing_pdf.pdf"

# create a textbox and add it to the existing pdf on page 2
pdf.pages[1].textbox "#{user.first_name} #{user.last_name}", height: 20, width: 70, y: 596, x: 72

# output the new pdf which now contains your dynamic data
pdf.save "#{Rails.root}/public/pdf/output#{Time.now.to_s}.pdf"

テキストボックスメソッドの詳細については、こちらをご覧ください。 https://www.rubydoc.info/gems/combine_pdf/0.2.5/CombinePDF/Page_Methods#textbox-instance_method

私はこれに何日も費やして、さまざまな宝石を調べました:prawnwicked_pdfpdfkitfillable_pdf

しかし、これは2019年の時点で私にとってはるかにスムーズな解決策でした。

これにより誰かが多くの時間を節約できることを願っていますので、PDFで私がしなければならなかったすべての試行錯誤を経験する必要はありません。

1
Sami Birnbaum

私が考えることができる最高のものは Rails-latex で、既存のPDFファイルを編集することはできませんが、テンプレート* .texを設定することはできます) .erbを動的に変更して、PDF形式(およびdviやその他多数)に)にコンパイルできます。

1
rudolph9

PDFLib はあなたが望むことをするようで、Rubyバインディングを持っています。

1
Joel Meador

私の研究によると、エビは私が見つけた無料で最高の宝石の1つです。テンプレートの機能は、それ以降のバージョンでは機能しません。テンプレートで動作する最新バージョンは1.0.0.rc2-2013年3月1日です。テンプレートで動作するそれ以降のバージョンは見つかりませんでした。これより新しいバージョンを使用している場合は注意してください。詳細については、以下のスレッドを確認してください。

https://groups.google.com/forum/#!searchin/prawn-Ruby/prawn $ 20templates/prawn-Ruby/RYGPImNcR0I/7mxtnrEDHeQJ

PDFtkは、PDF操作およびテンプレートを操作するための別の有能なツールです。しかし、次の点に言及しています、

  • このライブラリは個人使用は無料ですが、本番環境で使用する場合はライセンスが必要です
  • これはRuby以外のコマンドラインツールです

詳細については、以下のリンクを参照してください http://adamalbrecht.com/2014/01/31/pre-filling-pdf-form-templates-in-Ruby-on-Rails-with-pdftk/ =

0
SajithP