Создание сплющенного PDF файла с помощью Python

Когда я печатаю PDF файл из любого исходного PDF файла, размер файла уменьшается и удаляет текстовые поля, представленные в форме. Короче говоря, он сглаживает файл. Это поведение, которого я хочу достичь.

Следующий код для создания PDF с использованием другого PDF в качестве источника (тот, который я хочу сгладить), также записывает текстовые поля.

Можно ли получить PDF без текстовых полей, сгладить его? Так же, как Adobe, когда я печатаю PDF как PDF.

Мой другой код выглядит примерно так: минус некоторые вещи:

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

Подводя итоги: У меня есть pdf, я добавляю в него текстовое поле, скрывая информацию и добавляя новую информацию, а затем печатаю pdf файл из этого pdf. Текстовое поле больше не редактируется и не перемещается. Я хотел автоматизировать этот процесс, но все, что я пробовал, все еще допускало редактирование текстового поля.

Ответ 1

Если установка пакета ОС - это опция, вы можете использовать pdftk с его оболочкой python pypdftk следующим образом:

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

Вам также потребуется установить пакет pdftk, который на Ubuntu можно сделать следующим образом:

sudo apt-get install pdftk

Библиотека pypdftk может быть загружена из PyPI:

pip install pypdftk