Я пытаюсь написать короткий скрипт, который содержит 100 страниц pdf (~ 100 МБ), который является входным файлом. Я сделал файл водяных знаков размером ~ 60 КБ и пытаюсь создать вывод, объединяющий 2 файла, страницу за страницей, чтобы получить пронумерованный выходной файл. Файл водяного знака был создан reportlab, который представляет собой пустой документ на 100 страниц с правильными номерами страниц внизу (1,2,3,4,5, et c ...)
Хотя Сценарий работает, для его запуска потребовалось 13 минут с использованием посредственного четырехъядерного процессора, в среднем около 30% загруженности процессора и 5,5 ГБ оперативной памяти. Это намного больше, чем я ожидал, поскольку создание файла водяных знаков происходит практически мгновенно.
Размер выходного файла также составляет ~ 285 МБ, что намного больше, чем как для входного файла, так и для файла водяных знаков вместе взятых.
Код ниже:
def mergepdffiles(inputfile,outputfile,watermarkfile):
template = PyPDF2.PdfFileReader(open(inputfile, 'rb'))
watermark = PyPDF2.PdfFileReader(open(watermarkfile, 'rb'))
output = PyPDF2.PdfFileWriter()
for i in range(template.getNumPages()):
page = template.getPage(i)
page.mergePage(watermark.getPage(i))
output.addPage(page)
with open(outputfile, 'wb') as file:
output.write(file)
return None
Я подозреваю, что есть гораздо более эффективный способ сделать это с точки зрения скорости обработки и использования памяти.
В качестве альтернативы, есть ли более оптимальный способ добавления нижних колонтитулов на каждую страницу в многостраничном PDF без необходимости объединения двух существующих файлов? Я бы предположил, что это будет более эффективным.