简体   繁体   English

python 在多个 pdf 文件上写入 pdf - pypdf 合并文件

[英]python write to pdf on multiple pdf files - pypdf merges files

Desired: watermark multiple PDF files on each page期望:每页水印多个PDF文件
Issue: I can't seem to find a way to close a stream and open new stream for file ( f ), the end result is output of the PDF files but each preposit PDF contains the content of the preceding PDF file - this is not the desired outcome . Issue: I can't seem to find a way to close a stream and open new stream for file ( f ), the end result is output of the PDF files but each preposit PDF contains the content of the preceding PDF file - this is not想要的结果

Here is my code:这是我的代码:

# -*- coding: utf-8 -*-

import os
import re
from PyPDF4 import PdfFileWriter, PdfFileReader
from reportlab.pdfgen import canvas
from datetime import datetime
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from dotenv import load_dotenv

load_dotenv()

def put_watermark(input_files, output_files):
    pdfmetrics.registerFont(TTFont('English', 'Arial.ttf'))
    now = datetime.now()
    hebrew = (" some string ")
    dt_string =  now.strftime("%d/%m/%Y %H:%M")
    dt_string =  dt_string + hebrew 
    genmark = canvas.Canvas("watermark.pdf")
    genmark.setFont("Hebrew", 12)
    genmark.drawString(350,15, dt_string)
    genmark.save()
    watermark_instance = PdfFileReader("watermark.pdf")
    watermark_page = watermark_instance.getPage(0)
    pdf_writer = PdfFileWriter()

    for filename in os.listdir(input_files):
        f = os.path.join(input_files, filename)
        # Generate canvas with timestamp
        pdf_reader = PdfFileReader(f)

        for page in range(pdf_reader.getNumPages()):
            page = pdf_reader.getPage(page)
            page.mergePage(watermark_page)
            pdf_writer.addPage(page)
            output_file = os.path.join(output_files, filename)
        
    with open(output_file, 'wb') as out:
            pdf_writer.write(out)

    os.remove('watermark.pdf')

if __name__ == '__main__':
    put_watermark(input_files = os.environ["PYPDF_INPUT"],
              output_files = os.environ["PYPDF_OUTPUT"])

Change to pyPDF2 from pyPDF4 solved this issue.从 pyPDF4 更改为 pyPDF2 解决了这个问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM