2014-11-19 12 views
11

Khi tôi in một tệp PDF từ bất kỳ tệp PDF nguồn nào của mình, kích thước tệp sẽ giảm xuống và loại bỏ các hộp văn bản có trong biểu mẫu. Tóm lại, nó làm phẳng tập tin. Đây là hành vi tôi muốn đạt được.Tạo PDF phẳng với Python

Đoạn mã sau để tạo PDF bằng cách sử dụng PDF khác làm nguồn (tài liệu tôi muốn làm phẳng), nó cũng viết các hộp văn bản.

Tôi có thể nhận được tệp PDF mà không có hộp văn bản, làm phẳng không? Cũng giống như Adobe khi tôi in PDF dưới dạng PDF.

mã khác của tôi trông giống như trừ này một số điều:

import os 
import StringIO 
from pyPdf import PdfFileWriter, PdfFileReader 
from reportlab.pdfgen import canvas 
from reportlab.lib.pagesizes import letter 

directory = os.path.join(os.getcwd(), "source") # dir we are interested in 
fif = [f for f in os.listdir(directory) if f[-3:] == 'pdf'] # get the PDFs 
for i in fif: 
    packet = StringIO.StringIO() 
    can = canvas.Canvas(packet, pagesize=letter) 
    can.rotate(-90) 
    can.save() 

    packet.seek(0) 
    new_pdf = PdfFileReader(packet) 
    fname = os.path.join('source', i) 
    existing_pdf = PdfFileReader(file(fname, "rb")) 
    output = PdfFileWriter() 
    nump = existing_pdf.getNumPages() 
    page = existing_pdf.getPage(0) 
    for l in range(nump): 
     output.addPage(existing_pdf.getPage(l)) 
    page.mergePage(new_pdf.getPage(0)) 
    outputStream = file("out-"+i, "wb") 
    output.write(outputStream) 
    outputStream.close() 
    print fName + " written as", i 

Tổng hợp: Tôi đã một pdf, tôi thêm một hộp văn bản với nó, bao che cho thông tin và bổ sung thông tin mới, và sau đó Tôi in một bản pdf từ bản pdf đó. Hộp văn bản sẽ không thể chỉnh sửa hoặc di chuyển được nữa. Tôi muốn tự động hóa quy trình đó nhưng mọi thứ tôi đã thử vẫn cho phép hộp văn bản có thể chỉnh sửa được.

+0

Cũng đang tìm giải pháp cho việc này. Tôi có một kịch bản Python watermarking, nhưng watermark được trong cách khi cố gắng để chọn hoặc làm nổi bật văn bản trong tài liệu. Nếu tôi có thể tạo một PDF watermark phẳng và sau đó hợp nhất nó với các tệp PDF nguồn, điều đó sẽ giải quyết được nó. –

+0

Tên tệp có tuân thủ một số quy ước cụ thể không? nếu vậy, đó là ngữ nghĩa? Mục đích của việc chia nhỏ tên tập tin theo không gian, và sau đó bằng dấu phẩy là gì? (nếu không, tập lệnh không thành công, nhưng tôi không chắc liệu có liên quan hay không cho vấn đề bạn đang gặp phải) – gpoo

+0

+ MakeCents Tôi không thể tạo lại vấn đề. Tôi không có hộp. Bạn có thể dán một hình ảnh với kết quả bạn nhận được và kết quả mong đợi không? – gpoo

Trả lời

8

Nếu cài đặt một gói phần mềm hệ điều hành là một lựa chọn, sau đó bạn có thể sử dụng pdftk với python wrapper của nó pypdftk như thế này:

import pypdftk 
pypdftk.fill_form('filled.pdf', out_file='flattened.pdf', flatten=True) 

Bạn cũng sẽ cần phải cài đặt pdftk gói, trong đó trên Ubuntu có thể được thực hiện như này:

sudo apt-get install pdftk 

thư viện pypdftk thể bằng cách tải về từ PyPI:

pip install pypdftk 
+0

là có cách nào để làm điều đó mà không cần pdftk? Tôi hỏi vì tôi đang cố gắng viết một bản sao pdftk vì pdftk không hoạt động trên centos7. Mọi sự trợ giúp sẽ rất được trân trọng. –

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