2009-03-23 12 views
5

Tôi đang sử dụng bộ công cụ reportlab trong Python để tạo một số báo cáo ở định dạng PDF. Tôi muốn sử dụng một số phần đã được xác định trước của tài liệu đã được xuất bản ở định dạng PDF để được đưa vào tệp PDF được tạo. Có thể (và làm thế nào) để thực hiện điều này trong reportlab hoặc trong thư viện python?Cách đưa trang vào PDF trong tài liệu PDF bằng Python

Tôi biết tôi có thể sử dụng một số công cụ khác như PDF Toolkit (pdftk) nhưng tôi đang tìm giải pháp dựa trên Python.

Trả lời

6

Tôi hiện đang sử dụng PyPDF để đọc, viết và kết hợp PDF và ReportLab hiện có để tạo nội dung mới. Sử dụng hai gói có vẻ hoạt động tốt hơn bất kỳ gói nào tôi có thể tìm thấy.

+0

Vâng, tôi thích gói này. Ví dụ đầu tiên là những gì tôi muốn, tôi sẽ thử. – Jiri

1

Có một tiện ích bổ sung cho ReportLab — PageCatcher.

+0

Ok, đây có vẻ là công cụ phù hợp. Thật không may nó là trong phiên bản thương mại của bộ công cụ reportlab và tôi không thể sử dụng nó trực tiếp - Tôi đang sử dụng phiên bản mã nguồn mở. Và không có giá cả - có vẻ như tôi phải thương lượng một số giá với reportlab trước khi tải xuống. – Jiri

2

Nếu bạn muốn đặt các trang PDF hiện có trong tài liệu Báo cáo của mình, tôi khuyên bạn nên pdfrw. Không giống như PageCatcher, nó miễn phí.

Tôi đã sử dụng nó cho một số dự án mà tôi cần phải thêm mã vạch vv vào tài liệu hiện có và nó hoạt động rất tốt. Có một vài số examples trên trang dự án về cách sử dụng nó với Reportlab.

Một vài điều cần lưu ý mặc dù:

Nếu nguồn PDF tài liệu bị lỗi (do chương trình có nguồn gốc sau PDF spec không hoàn hảo chẳng hạn), pdfrw có thể thất bại mặc dù một cái gì đó như Adobe Reader không có vấn đề rõ ràng đọc PDF. pdfrw hiện không phải là lỗi rất khoan dung.

Ngoài ra, pdfrw hoạt động bằng cách hoàn toàn bất khả tri với nội dung thực tế của trang PDF bạn đang đặt. Vì vậy, ví dụ, bạn sẽ không thể sử dụng pdfrw kiểm tra một trang để xem nó có chứa một chuỗi văn bản nhất định ở góc dưới bên phải hay không. Tuy nhiên, nếu bạn không cần làm bất cứ điều gì như vậy, bạn sẽ ổn.