Редактирование PDF страницы за страницей - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь внести уникальные изменения в отдельные страницы в уже существующем PDF. Тем не менее, изменения остаются прежними.

Я пытался использовать FPDF (не знал, как с этим отредактировать уже существующий pdf), а затем сейчас пытаюсь использовать PYPDF2 с reportlab.

#
from PyPDF2 import PdfFileWriter, PdfFileReader
import io
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

def WriteOnPdf (targetpdf, pageTopicsDict):
    packet = io.BytesIO()
    # Create a new PDF with Reportlab
    can = canvas.Canvas(packet, pagesize=letter)
    can.setFont('Helvetica', 13)
    can.drawString(5, 730, pageTopicsDict[0])
    can.save()

    # Move to the beginning of the StringIO buffer
    packet.seek(0)
    new_pdf = PdfFileReader(packet)
    # Read your existing PDF
    existing_pdf = PdfFileReader(open(targetpdf, "rb"))
    output = PdfFileWriter()
    # Add the "watermark" (which is the new pdf) on the existing page

    for i in range(existing_pdf.numPages):
        print(i, pageTopicsDict[i])
        can.drawString(5, 730, pageTopicsDict[i])
        page = existing_pdf.getPage(i)
        page.mergePage(new_pdf.getPage(0))# index out of range if not set to 0.
        output.addPage(page)    

    # Finally, write "output" to a real file
    outputStream = open("destination.pdf", "wb")
    output.write(outputStream)
    outputStream.close()

dummyDict = {0: "abc", 1: "de, fg", 2: "hijklmn"}
WriteOnPdf ("test.pdf", dummyDict)

Ожидается: PDF с «abc» в верхнем левом углу страницы 0, «de, fg» на странице 1, «hijklmn» на странице 2 ... Фактически: все страницы имеют "abc"

1 Ответ

0 голосов
/ 05 мая 2019

решаемые; инициализировал пакет и соответствующие переменные в цикле for, а не снаружи.

...