2012-02-07 53 views
24

Tôi có một vài tệp mẫu PDF có nội dung phức tạp và một số vùng/khu vực trống trong đó. Tôi cần để có thể viết văn bản trong những vùng trống và lưu các tệp PDF kết quả trong một thư mục.Làm thế nào để chỉnh sửa hoặc viết trên PDF hiện có với Ruby?

Tôi googled cho câu trả lời về câu hỏi này khá mạnh mẽ, nhưng tôi không tìm thấy câu trả lời rõ ràng. Một trong những giải pháp tốt hơn là PDF::Toolkit, nhưng nó sẽ yêu cầu mua Adobe Acrobat để thêm các thuộc tính có thể thay thế vào các tài liệu PDF hiện có.

Thế giới PHP được ưu tiên với FPDI có thể được sử dụng để chỉ cần mở một tệp PDF và ghi/vẽ lên nó trên nội dung hiện có. Có một Ruby port of this library, nhưng cam kết cuối cùng cho nó đã xảy ra vào đầu năm 2009. Ngoài ra dự án không giống như nó được sử dụng rộng rãi và được hỗ trợ.

Câu hỏi đặt ra là: Cách tốt hơn của Ruby trong việc chỉnh sửa, viết hoặc vẽ trên các tệp PDF hiện có là gì?

Câu hỏi này dường như cũng không được trả lời ở đây. Những câu hỏi này có liên quan, nhưng không thực sự giống nhau:

Trả lời

27

bạn phải chắc chắn kiểm tra đá quý Prawn, theo đó bạn có thể tạo bất kỳ tệp pdf tùy chỉnh nào. Bạn thực sự có thể sử dụng tôm để viết văn bản vào các tệp pdf hiện có bằng cách xử lý tệp PDF hiện tại làm mẫu cho tài liệu Prawn mới của bạn.

Ví dụ:

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 

này sẽ viết văn bản lên trang đầu tiên của pdf cũ.

Xem thêm ở đây: http://prawn.majesticseacreature.com/manual.pdf

+0

Vâng, tôi đã xem nó (và thậm chí được liệt kê trong câu hỏi của tôi), nhưng việc chỉnh sửa các tệp PDF hiện có là một yêu cầu cho dự án của tôi. Cảm ơn bạn đã trả lời. –

+0

Tôi có vấn đề này, bất kỳ ý tưởng? http://stackoverflow.com/questions/12076299/my-text-is-written-in-a-bad-direction-when-i-use-a-template – Sebastien

+2

Tôi sử dụng chính xác phương pháp này để thêm văn bản vào các tệp PDF hiện có . Tại sao câu trả lời này không phù hợp với bạn? –

1

Điều tốt nhất tôi có thể nghĩ đến là Rails-latex, nó không cho phép bạn chỉnh sửa các tệp PDF hiện có nhưng nó sẽ cho phép bạn thiết lập mẫu * .tex.erb mà bạn có thể tự động sửa đổi và biên dịch chúng thành PDF cho mat (cùng với dvi và một số người khác).

+0

Cảm ơn bạn đã trả lời câu hỏi này, nhưng việc chỉnh sửa tệp PDF hiện tại là một yêu cầu trong trường hợp của tôi. Để tạo các tệp PDF mới như một con tôm sẽ làm việc cho tôi ... –

1

PDFLib dường như làm điều bạn muốn và đã gán ruby.

+0

Điều này thực sự trông giống như một công cụ tuyệt vời, nhưng vì nó không phải là nguồn mở (không miễn phí) - chúng tôi sẽ phải xem xét giá. Phiên bản chúng ta có thể sử dụng là khoảng $ 2100 - đây là một dự án nhỏ có ngân sách thấp của chúng tôi. Ngoài ra điều này có thể không được coi là "Đường ray", vì nó quá đắt :) Tôi có thể sẽ tiếp tục với PDF :: Bộ công cụ và sử dụng nó để điền các giá trị thuộc tính PDF, thay vì vẽ trên PDF. Nhưng cảm ơn bạn vì câu trả lời này - Tôi thực sự đánh giá cao nó! –

+0

Vâng, nó luôn luôn khó để cắn một chi phí lớn trong đầu. Đã mua Prince XML để tạo PDF một thời gian trở lại, và nó có vẻ như rất nhiều tiền vào thời điểm đó, nhưng nó đã được đền đáp. –

+0

Tôi cũng sử dụng Hoàng tử XML cho một trong những dự án khác của tôi - nó hoạt động, nhưng không phải cho trường hợp này tôi đang cố gắng giải quyết không may. –

14

Kể từ Prawn đã loại bỏ tính năng mẫu (đó là đầy đủ các lỗi) là cách dễ nhất tôi đã tìm thấy như sau:

  1. Sử dụng Prawn để tạo ra một PDF với ONLY những phần năng động mà bạn muốn thêm .
  2. Sử dụng PDF::Toolkit (kết thúc tốt đẹp PDFtk) để kết hợp Prawn PDF với tệp gốc.

Rough Ví dụ:

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

Tôi khuyên bạn nên prawn để tạo ra các file PDF và sau đó sử dụng combine_pdf để kết hợp hai file PDF được tạo ra với nhau thành một. Tôi sử dụng nó như thế này và nó hoạt động tốt.

dụ ngắn (từ README) làm thế nào để kết hợp hai 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

cảm ơn bạn đã chia sẻ điều này, hoạt động tốt cho trường hợp sử dụng của chúng tôi. –

+0

Tôi thấy rằng điều này không hiệu quả đối với tôi, vì tệp "logo" (đối với tôi, đó là một mẫu tổng thể, rằng tôi chỉ thêm một chút văn bản vào) sẽ bao gồm bất cứ điều gì tôi đã thêm (sử dụng Prawn :: PDF, tương tự như một số câu trả lời khác). Tôi tìm thấy điều này để giải quyết nó cho tôi, mặc dù (thay thế những gì bên trong khối trên dòng 3 trong câu trả lời này): 'page.replace (company_logo.copy << page)' – lindes

1

Theo nghiên cứu của tôi, Tôm là một trong những tự do và đá quý tốt nhất mà tôi tìm thấy. Chức năng mẫu không hoạt động trong phiên bản sau. Phiên bản mới nhất mà tôi có thể tìm thấy để làm việc với các mẫu là 1.0.0.rc2 - ngày 1 tháng 3 năm 2013. Không thể tìm thấy bất kỳ phiên bản nào sau này hoạt động với các mẫu. Vì vậy, hãy chú ý nếu bạn đang sử dụng các phiên bản sau này. Kiểm tra chuỗi bên dưới để biết thêm thông tin.

https://groups.google.com/forum/#!searchin/prawn-ruby/prawn $ 20templates/tôm-ruby/RYGPImNcR0I/7mxtnrEDHeQJ

pdftk là một công cụ có khả năng cho thao tác PDF và làm việc với các mẫu. Nhưng nó đề cập đến điểm sau đây,

  • Thư viện này là miễn phí cho sử dụng cá nhân, nhưng đòi hỏi phải có giấy phép nếu được sử dụng trong sản xuất
  • Đây là một công cụ không ruby ​​dòng lệnh

Để biết thêm thông tin vui lòng tham khảo liên kết bên dưới http://adamalbrecht.com/2014/01/31/pre-filling-pdf-form-templates-in-ruby-on-rails-with-pdftk/

Các vấn đề liên quan