2008-09-17 62 views
10

tôi có một loạt các file PDF được đặt tên theo trình tự như sau:Có thể kết hợp một loạt tệp PDF thành một tệp bằng Ruby không?

  • 01_foo.pdf
  • 02_bar.pdf
  • 03_baz.pdf
  • , vv

Sử dụng Ruby, là nó có thể kết hợp chúng thành một tệp PDF lớn trong khi vẫn giữ chúng theo thứ tự không? Tôi không ngại cài đặt bất kỳ đá quý cần thiết nào để thực hiện công việc.

Nếu điều này không thể xảy ra trong Ruby, ngôn ngữ khác thì thế nào? Không có thành phần thương mại, nếu có thể.


Cập nhật:Jason Navarrete's suggestion dẫn đến giải pháp hoàn hảo:

Đặt tập tin PDF cần phải được kết hợp trong một thư mục cùng với pdftk (hoặc đảm bảo pdftk là trong PATH của bạn), sau đó chạy kịch bản sau đây:

pdfs = Dir["[0-9][0-9]_*"].sort.join(" ") 
`pdftk #{pdfs} output combined.pdf` 

Hoặc tôi thậm chí có thể làm điều đó như một lớp lót từ dòng lệnh:

ruby -e '`pdftk #{Dir["[0-9][0-9]_*"].sort.join(" ")} output combined.pdf`' 

Đề xuất tuyệt vời Jason, giải pháp hoàn hảo, cảm ơn. Cho anh ta một người bỏ phiếu bầu số.

Trả lời

14

Bài đăng Ruby-Talk đề xuất sử dụng bộ công cụ pdftk để hợp nhất các tệp PDF.

Cần tương đối đơn giản để gọi pdftk là một quy trình bên ngoài và xử lý quá trình hợp nhất. PDF :: Writer có thể quá mức cần thiết vì tất cả những gì bạn đang tìm kiếm để thực hiện là một phần phụ giản đơn.

+0

Cảm ơn, tôi chưa từng gặp pdftk trước đây. Thật là một công cụ tuyệt vời! –

0

Tôi không nghĩ Ruby có công cụ cho điều đó. Bạn có thể kiểm tra ImageMagick và Cairo. ImageMagick có thể được sử dụng để liên kết nhiều ảnh/tài liệu với nhau, nhưng tôi không chắc về trường hợp PDF.

Sau đó, một lần nữa, chắc chắn có các công cụ Windows (thương mại) để làm điều này.

Tôi sử dụng Cairo bản thân mình để tạo PDF. Nếu tệp PDF đến từ bạn, có thể đó sẽ là giải pháp (nó hỗ trợ nhiều trang). Chúc may mắn!

+1

Cảm ơn bạn đã đề xuất. Chúng tôi thực sự sử dụng nhiều công cụ khác nhau để tạo và thậm chí kết hợp các tệp PDF. Tuy nhiên, người ta không thể dễ dàng tự động hóa chúng, đặc biệt là công cụ kết hợp, do đó mong muốn viết nó trong Ruby (hoặc một ngôn ngữ khác). –

2

Bạn có thể thực hiện việc này bằng cách chuyển sang PostScript và quay lại. Các tệp PostScript có thể được ghép nối một cách trivially. Ví dụ, đây là một kịch bản Bash có sử dụng các công cụ Ghostscript ps2pdf và pdf2ps:

 
#!/bin/bash 
for file in 01_foo.pdf 02_bar.pdf 03_baz.pdf; do 
    pdf2ps $file - >> temp.ps 
done 

ps2pdf temp.ps output.pdf 
rm temp.ps 

Tôi không quen thuộc với Ruby, nhưng có gần như chắc chắn một số chức năng (có thể được gọi system() (chỉ đoán)) mà sẽ gọi một dòng lệnh đã cho.

0

Tôi khuyên bạn nên xem mã cho PDFCreator (VB, nếu tôi không nhầm, nhưng điều đó không quan trọng vì bạn chỉ đang triển khai mã tương tự bằng ngôn ngữ khác), sử dụng GhostScript (giấy phép GNU)). Hoặc chỉ cần đào sâu vào GhostScript; cũng có một lớp mặt tiền có tên là GhostPDF, có thể làm những gì bạn muốn.

Nếu bạn có thể điều khiển GhostScript bằng VB, bạn có thể làm điều đó với C, có nghĩa là bạn có thể làm điều đó với Ruby.

Ruby cũng có IO.popen, cho phép bạn gọi ra các chương trình bên ngoài có thể thực hiện việc này.

-1

Bất kỳ mã Ruby nào để thực hiện điều này trong một ứng dụng thực có thể sẽ rất chậm. Tôi sẽ thử và tìm kiếm các công cụ unix để thực hiện công việc. Đây là một trong những nét đẹp của việc sử dụng Mac OS X, nó có khả năng PDF rất nhanh được tích hợp sẵn. Điều tốt nhất tiếp theo có lẽ là một công cụ Unix.

Thực ra, tôi đã thành công với rtex. Nếu bạn nhìn here bạn sẽ tìm thấy một số thông tin về nó. Đó là nhanh hơn nhiều so với bất kỳ thư viện Ruby mà tôi đã sử dụng và tôi khá chắc chắn latex có một chức năng để mang lại dữ liệu PDF từ các nguồn khác.

2

Nếu bạn đã Ghostscript trên nền tảng của bạn, bao ra và thực hiện lệnh này:

gs -dBATCH -dNOPAUSE -q -sDEVICE = pdfwrite -sOutputFile = finished.pdf < file pdf nguồn của bạn >

+0

Tùy chọn -sPAPERSIZE cho gs là một lựa chọn hữu ích để biết. Ví dụ: -sPAPERSIZE = a4 hoặc -sPAPERSIZE = chữ cái. –

2

Tôi đã thử giải pháp pdftk và gặp vấn đề với cả SnowLeopard và Tiger. Cài đặt trên Tiger thực sự tàn phá trên hệ thống của tôi và khiến tôi không thể chạy tập lệnh/máy chủ, may mắn thay đó là một cỗ máy đã nghỉ hưu khỏi phát triển web.

Sau đó tìm thấy một tùy chọn khác: - joinPDF. Là một cài đặt hoàn toàn không đau và nhanh chóng và nó hoạt động hoàn hảo.

Cũng đã thử GhostScript và nó không thành công thảm hại (không thể đọc phông chữ và tôi đã kết thúc bằng các tệp PDF chỉ có hình ảnh).

Nhưng nếu bạn đang tìm kiếm giải pháp cho vấn đề này, bạn có thể muốn thử joinPDF.

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