2010-04-26 8 views
6

Tôi muốn điền các biểu mẫu PDF hiện có theo chương trình. Tất cả những gì tôi thực sự cần làm là lấy thông tin từ đầu vào của người dùng và sau đó đặt văn bản thích hợp lên một tệp PDF hiện có ở các vị trí thích hợp. Tôi đã có thể làm điều này với reportlab bằng cách cho cùng một tờ giấy vào một máy in, hai lần, nhưng điều này chỉ thực sự xoa cho tôi một cách sai lầm.Thêm văn bản qua các tệp PDF hiện có bằng cách sử dụng reportlab

Tôi bị cám dỗ để tự mình thiết kế lại từng tệp PDF hiện tại và tự vẽ mọi dòng và ký tự trước khi thêm văn bản nhập của người dùng, nhưng tôi muốn kiểm tra xem có cách nào dễ dàng để lấy tệp PDF hiện tại hay không đặt làm nền cho một số văn bản bổ sung. Tôi thực sự thích sử dụng python vì nó là ngôn ngữ duy nhất tôi cảm thấy thoải mái.

Tôi cũng nhận ra rằng tôi chỉ có thể quét tài liệu và sử dụng hình ảnh raster kết quả làm nền, nhưng tôi thích độ chính xác của đồ họa vector hơn.

Có vẻ như ReportLab has a commercial product with this functionality và chức năng cụ thể mà tôi đang tìm nằm trong đó (copyPages) - nhưng có vẻ như quá mức cần phải trả cho sản phẩm hình 4 cho một chức năng đơn giản để sử dụng phi lợi nhuận.

Trả lời

5

Nếu các biểu mẫu PDF là AcroForms thực, bạn có thể sử dụng iText để điền chúng. Tôi không biết nếu có cổng khác hơn iText (java, bản gốc) và iTextSharp (C#) nhưng rất dễ sử dụng và miễn phí nếu bạn không ngại mở nguồn giải pháp của mình. Bạn có thể có một cái nhìn tại sample code hoặc (đoạn java) này:

String formFile = "/path/to/myform.pdf" 
String newFile = "/path/to/output.pdf" 
PdfReader reader = new PdfReader(formFile); 
FileOutputStream outStream = new FileOutputStream(newFile); 
PdfStamper stamper = new PdfStamper(reader, outStream); 
AcroFields fields = stamper.getAcroFields(); 

// fill the form 
fields.setField("name", "Shane"); 
fields.setField("url", "http://stackoverflow.com"); 

// PDF infos 
HashMap<String, String> infoDoc = new HashMap<String, String>(); 
infoDoc.put("Title", "your title here"); 
infoDoc.put("Author", "JRE ;)"); 
stamper.setMoreInfo(infoDoc); 

// Flatten the PDF & cleanup 
stamper.setFormFlattening(true); 
stamper.close(); 
reader.close(); 
outStream.close(); 
0

Có vẻ như bạn chỉ cần đặt một PDF sẵn có trong nền của một PDF ReportLab mà bạn đang tạo. Thư viện PDFRW miễn phí có thể thực hiện điều này một cách dễ dàng. Hãy xem Example Tools page để biết một số ví dụ cụ thể về kỹ thuật này.

2

Nếu bạn chỉ muốn thêm một số văn bản vào giấy được in sẵn. Bạn có thể quét nó dưới dạng jpg, sau đó đặt jpg này làm nền. Vui lòng tham khảo trang 15 tại hướng dẫn sử dụng báo cáo, chỉ cần gọi drawImage