42

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

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

PHP の世界はFPDIに恵まれており、これを使用して PDF ファイルを開き、既存のコンテンツの上に書き込み/描画することができます。このライブラリの Ruby ポートがありますが、最後のコミットは 2009 年の初めに行われました。また、そのプロジェクトは広く使用され、サポートされているようには見えません。

問題は、既存の PDF を編集、書き込み、または描画する Ruby の方法として、どの方法が優れているかということです。

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

4

8 に答える 8

35

カスタムpdfファイルを生成できるPrawn gemを必ずチェックしてください。既存の PDF を新しい Prawn ドキュメントのテンプレートとして扱うことで、実際に prawn を使用して既存の 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

于 2012-02-09T05:47:37.053 に答える
24

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

  1. Prawnを使用して、追加したい動的部分のみを含む PDF を生成します。
  2. PDF::Toolkit ( PDFtkをラップする) を使用して、Prawn 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)
于 2015-05-18T23:39:26.807 に答える
23

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"
于 2015-06-01T09:58:01.353 に答える
1

PDFLibはあなたが望むことをしているようで、ルビバインディングがあります。

于 2012-02-09T07:02:52.247 に答える
1

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

于 2012-02-09T05:32:16.143 に答える
0

Origami gem を使用して、既存の pdf にパスワードを追加したり、編集したりできます。

pdf = WickedPdf.new.pdf_from_url(pdf_params[:url])
temp_file = Tempfile.new('temp', encoding: 'ascii-8bit')
temp_file.write(pdf)

# Creates an encrypted document with AES256 and passwords.
pdf = PDF.read(temp_file.path).encrypt(cipher: 'aes', key_size: 256,user_passwd: pdf_params[:user_password], owner_passwd: pdf_params[:owner_password])
save_path = "#{File.basename(__FILE__, ".rb")}.pdf"

pdf.save(save_path)
temp_file.close
于 2021-03-23T07:38:11.603 に答える