2012-02-07 86 views
24

我有一對夫婦的PDF模板文件複雜的內容,並在他們的幾個盲點區域/地區。我需要能夠在這些空白區域寫入文本並將生成的PDF保存到文件夾中。如何使用Ruby編輯或編寫現有PDF?

我用Google搜索了關於這個問題的答案很密集,但我沒有找到明確的答案。更好的解決方案之一是PDF::Toolkit,但它需要購買Adobe Acrobat來爲現有PDF文檔添加可替換的屬性。

PHP的世界是幸運的FPDI可以用來簡單地打開一個PDF文件,並寫入/在現有的內容就可以了借鑑。有一個Ruby port of this library,但最後一次提交發生在2009年初。此外,該項目看起來並不像它被廣泛使用和支持。

現在的問題是:什麼是更好的編輯,寫作或繪圖現有PDF的Ruby方式?

這個問題也似乎沒有在這裏得到解答的。這些問題是相關的,但不是真的一樣:

回答

27

你必須明確檢查出Prawn創業板,通過它可以生成任何自定義PDF文件。您可以通過將現有的PDF視爲您的新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

+0

是的,我已經考慮過它(甚至列在我的問題中),但編輯現有的PDF是我的項目的要求。謝謝你的答案。 – 2012-02-09 15:03:50

+0

我有這個問題,有什麼想法嗎? http://stackoverflow.com/questions/12076299/my-text-is-written-in-a-bad-direction-when-i-use-a-template – Sebastien 2012-08-23 07:10:46

+2

我正是使用這種方法廣泛地添加文本到現有的PDF文件。爲什麼這個答案不適合你? – 2012-11-04 23:49:49

1

我能想到的是Rails-latex最好的,它不允許您可以編輯現有的PDF文件,但它可以讓您設置模板* .tex.erb,您可以動態修改它們並將它們編譯爲PDF墊(以及dvi和其他許多)。

+0

謝謝你的回答,但編輯現有的PDF是我的要求。對於創建新的PDF文件,像對蝦這樣的工作對我來說... – 2012-02-09 14:58:18

1

PDFLib似乎做你想要的東西,有紅寶石綁定。

+0

這確實看起來像一個很棒的工具,但由於它不是開源的(不是免費的) - 我們必須考慮價格。我們可以使用的版本大約是2100美元 - 這是我們很多低預算的小型項目。此外,這可能不能被視爲「Rails方式」,因爲它太昂貴了:) 我可能會繼續使用PDF :: Toolkit,並使用它來填充PDF屬性值,而不是使用PDF進行繪製。 但是,謝謝你的答案 - 我真的很感激它! – 2012-02-09 15:02:53

+0

是的,一開始就很難啃掉一大筆開銷。購買了Prince XML用於製作PDF,而且當時似乎是很多錢,但它已經收到了回報。 – 2012-02-09 15:26:24

+0

我也使用Prince XML作爲我的其他項目之一 - 它的工作原理,但不是爲了這種情況,我試圖解決不幸的問題。 – 2012-02-09 20:58:41

14

由於Prawn去掉了模板功能(這是完全錯誤的),我發現最簡單的方法是:

  1. 使用Prawn生成PDF只與您要添加的動態部分。
  2. 使用PDF::Toolkit(它包裝PDFtk)的蝦PDF與原來相結合。

粗糙實施例:

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) 
12

我推薦prawn用於生成PDF文件,然後使用combine_pdf到兩個生成的PDF一起組合成一個。我像這樣使用它,它工作得很好。

簡短的例子(自述)的如何將兩個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" 
+0

感謝您分享此內容,對我們的使用案例非常有用。 – 2015-07-08 17:34:53

+0

我發現這對我來說效果不好,因爲「徽標」文件(對我來說,這是一個總體模板,我只是添加了一點文字)會掩蓋我添加的任何內容(使用Prawn :: PDF,類似於其他一些答案)。我發現這爲我解決了這個問題,儘管(在這個答案中替換了第3行中的塊):'page.replace(company_logo.copy << page)' – lindes 2017-11-12 20:40:49

1

根據我的研究,蝦是免費的,最好的寶石,我發現之一。模板功能在更高版本中不起作用。我能找到的用於模板的最新版本是1.0.0.rc2 - 2013年3月1日。無法找到任何適用於模板的更高版本。因此,如果您使用的是以後版本,請注意。檢查下面的線程獲取更多信息。

https://groups.google.com/forum/#!searchin/prawn-ruby/prawn $ 20templates /蝦 - 紅寶石/ RYGPImNcR0I/7mxtnrEDHeQJ

PDFTK是PDF操縱另一個能夠工具,並使用模板的工作。但它提到以下幾點,

  • 這個庫是免費供個人使用,但需要一個許可證,如果在生產中使用
  • 這是一個非紅寶石命令行工具

欲瞭解更多信息請參考下面的鏈接 http://adamalbrecht.com/2014/01/31/pre-filling-pdf-form-templates-in-ruby-on-rails-with-pdftk/