2014-11-19 11 views
11

Wenn ich ein PDF aus einer meiner Quell-PDFs drucke, fällt die Dateigröße und entfernt die Textfelder, die im Formular angezeigt werden. Kurz gesagt, es flacht die Datei ab. Das ist Verhalten, das ich erreichen möchte.Generieren Sie flaches PDF mit Python

Der folgende Code zum Erstellen einer PDF mit einer anderen PDF als Quelle (die ich abflachen möchte), schreibt es auch die Textfelder.

Kann ich ein PDF ohne die Textfelder bekommen, es zu glätten? Genau wie Adobe, wenn ich ein PDF als PDF drucke.

Mein anderer Code sieht so etwas wie dieser minus einige Dinge:

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 

Zusammengefasst: Ich habe ein pdf, füge ich ein Textfeld, um es, Informationen zu vertuschen und neue Informationen hinzufügen und dann Ich drucke ein pdf aus diesem pdf. Das Textfeld kann nicht mehr bearbeitet oder verschoben werden. Ich wollte diesen Prozess automatisieren, aber alles, was ich versuchte, erlaubte trotzdem, dass diese Textbox editierbar war.

+0

Auch auf der Suche nach einer Lösung für diese. Ich habe ein Wasserzeichen-Python-Skript, aber das Wasserzeichen stört mich, wenn ich Text im Dokument auswählen oder hervorheben möchte. Wenn ich ein flaches Wasserzeichen-PDF erstellen und es dann mit den Quell-PDFs zusammenführen könnte, würde das den Fehler beheben. –

+0

Folgen die Dateinamen bestimmten Konventionen? Wenn ja, welches ist die Semantik? Was ist der Zweck der Aufteilung des Dateinamens nach Leerzeichen und dann durch Komma? (Sonst schlägt das Skript fehl, aber ich bin mir nicht sicher, ob das für das Problem relevant ist oder nicht) – gpoo

+0

+ MakeCents Ich kann das Problem nicht reproduzieren. Ich bekomme keine Kisten. Können Sie ein Bild mit dem Ergebnis und dem erwarteten Ergebnis einfügen? – gpoo

Antwort

8

Wenn die Installation eines OS-Paket ist eine Option, dann könnte man pdftk mit seinen Python-Wrapper pypdftk wie folgt verwenden:

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

Sie müssten auch die pdftk-Paket installieren, die auf Ubuntu getan werden könnte, wie dies:

sudo apt-get install pdftk 

Die pypdftk Bibliothek kann von PyPI heruntergeladen von:

pip install pypdftk 
+0

gibt es eine Möglichkeit, es ohne pdftk zu tun? Ich frage, weil ich versuche, einen pdftk-Klon zu schreiben, da pdftk auf centos7 nicht funktioniert. Jede Hilfe würde sehr geschätzt werden. –