2014-11-19 31 views
11

Kaynak PDF'imlerimden bir PDF yazdırdığımda, dosya boyutu, formdaki metin kutuları düşer ve kaldırır. Kısaca, dosyayı düzleştirir. Bu, elde etmek istediğim davranış.Python ile düzleştirilmiş PDF oluştur

Kaynak olarak başka bir PDF (düzleştirmek istediğim) kullanarak PDF oluşturmak için aşağıdaki kod, metin kutuları formunu da yazar.

Metin kutuları olmadan PDF alabilir miyim? Tıpkı bir PDF'yi PDF olarak yazdırdığımda Adobe'nin yaptığı gibi. Ben o zaman pdf bilgi örtbas ve yeni bilgi ekleyerek buna bir metin kutusu ekleyin ve adres:

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 

özetlersek:

Benim diğer kod bu eksi gibi bir şey bazı şeyler görünüyor Bu pdf'den bir pdf yazdırıyorum. Metin kutusu artık düzenlenemez veya hareket edemez. Bu süreci otomatikleştirmek istedim ama denediğim her şey, metin kutusunun düzenlenebilir olmasına izin verdi. Bir OS paketi yükleme seçeneği ise

+0

Ayrıca buna bir çözüm arıyoruz. Filigran bir Python betiğim var, ancak belgedeki metni seçmeye veya vurgulamaya çalışırken filigran yoluna giriyor. Düzleştirilmiş bir filigran PDF oluşturabilir ve daha sonra kaynak PDF'lerle birleştirebilirsem, bunu çözebilirdim. –

+0

Dosya adları bazı özel kurallara uyuyor mu? eğer öyleyse, hangi semantik? Dosya adının boşlukla ve sonra virgülle ayrılmasının amacı nedir? (aksi halde, komut başarısız olur, ancak ilgili sorun olup olmadığından emin değilseniz emin değilim) – gpoo

+0

+ MakeCents Sorunu yeniden oluşturamıyorum. Kutularım yok. Bir görüntüyü aldığınız sonuçla ve beklenen sonuçla yapıştırabilir misiniz? – gpoo

cevap

8

, o zaman böyle kendi piton ambalajında ​​pypdftk ile pdftk kullanabilirsiniz:

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

Ayrıca Ubuntu gibi yapılabilirdi pdftk paketini yüklemeniz gerekir? Bu:

sudo apt-get install pdftk 

pypdftk kütüphane PyPI indirilebilir alınabilir:

pip install pypdftk 
+0

pdftk olmadan bunu yapmanın bir yolu var mı? Ben soruyorum çünkü pdftk centos7 üzerinde çalışmıyor gibi bir pdftk klon yazmaya çalışıyorum. Herhangi bir yardım büyük takdir edilecektir. –

İlgili konular