[英]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.