2014-11-19 18 views
11

Kiedy drukuję plik PDF z dowolnego z moich źródłowych plików PDF, rozmiar pliku spada i usuwa pola tekstowe w formie. W skrócie, spłaszcza plik. To jest zachowanie, które chcę osiągnąć.Generowanie spłaszczonego pliku PDF z pythonem

Poniższy kod do utworzenia pliku PDF przy użyciu innego pliku PDF jako źródła (tego, który chcę spłaszczyć), zapisuje również pola tekstowe.

Czy mogę uzyskać plik PDF bez pól tekstowych, spłaszczyć? Podobnie jak Adobe, kiedy drukuję PDF jako PDF.

Mój inny kod wyglądać tak minus kilka rzeczy:

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 

Reasumując: Mam pdf, dodać pole tekstowe do niego, ukrywanie informacji i dodawania nowych informacji, a następnie Drukuję pdf z tego pliku pdf. Pole tekstowe przestanie być edytowalne lub przenośne. Chciałem zautomatyzować ten proces, ale wszystko, co próbowałem, nadal pozwalało na edycję tego pola tekstowego.

+0

Poszukuje również rozwiązania tego problemu. Mam skrypt Python ze znakami wodnymi, ale znak wodny przeszkadza przy próbie wybrania lub zaznaczenia tekstu w dokumencie. Gdybym mógł wygenerować spłaszczony znak wodny PDF, a następnie połączyć go ze źródłowymi plikami PDF, rozwiąże to problem. –

+0

Czy nazwy plików są zgodne z określoną konwencją? jeśli tak, to jaka jest semantyczna? Jaki jest cel dzielenia nazwy pliku na spację, a następnie przecinek? (w przeciwnym razie skrypt się nie powiedzie, ale nie jestem pewien, czy jest to istotne, czy nie dla problemu, przed którym stoisz). – gpoo

+0

+ MakeCents Nie mogę odtworzyć problemu. Nie mam skrzynek. Czy możesz wkleić obraz z uzyskanym wynikiem i oczekiwanym wynikiem? – gpoo

Odpowiedz

8

przypadku instalowania pakietu OS jest opcją, a następnie można użyć pdftk z Pythona otoki pypdftk tak:

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

będzie też trzeba zainstalować pakiet pdftk, który na Ubuntu można zrobić jak to:

sudo apt-get install pdftk 

biblioteka pypdftk może być pobrany z PyPI:

pip install pypdftk 
+0

Czy istnieje sposób, aby to zrobić bez pdftk? Pytam, ponieważ próbuję napisać klon pdftk, ponieważ pdftk nie działa na centos7. Każda pomoc będzie bardzo ceniona. –