Для обоих Django Crash Course и предстоящий Две совки Django 3.x Мы используем новый процесс для визуализации PDF. К сожалению, до нескольких дней назад этот процесс не включал крышку. Вместо этого крышки были вставлены вручную с помощью Adobe Acrobat.
Пока этот ручной процесс работал, Это пришло с предсказуемыми последствиями Отказ
Слияние PDFS
Эта часть была проста и найден в любом количестве статей блога и переполнения стека.
- Шаг 1: Установите pypdf2.
- Шаг 2: Напишите скрипт, как видно ниже
from PyPDF2 import PdfFileMerger now = datetime.now() pdfs = [ 'images/Django_Crash_Course_5.5x8in.pdf', '_output/dcc.pdf', ] merger = PdfFileMerger() for pdf in pdfs: merger.append(pdf) merger.write("releases/beta-20200226.pdf") merger.close()
Это было в этот момент, что мы обнаружили, что наш новый файл, релизы/бета-20200226.PDF
, отсутствовал большинство метаданных. О, нет!
Добавление метаданных
Согласно документам PypDF2, Добавление метаданных очень прямая Отказ Просто пропустите Дикт
в addmetadata ()
функция. Я вставил этот код прямо перед вызовом на merger.write ()
:
merger.addMetadata({ "Title": "Django Crash Course", "Authors": 'Daniel Roy Greenfeld, Audrey Roy Greenfeld', "Description": "Covers Python 3.8 and Django 3.x", "ContentCreator": "Two Scoops Press", "CreateDate": "2020-02-26", "ModifyDate": "2020-02-26", })
PDF построен! Ага! Время открыть его и посмотреть результаты!
Увы, метаданные не появились.
Затем я провел много времени с пробным и ошибками, пытаясь получить метаданные, чтобы поступить правильно. Пока есть много статей, связанных с Python на Извлечение Метаданные с помощью PYPDF2 я боролись, чтобы найти все, что объяснил, как добавить метаданные.
Делаю свою домашнюю работу
После куча исследований (погугуляция, переполнение стека и посещение форумов) Я нашел замечательную книгу на О’Ррили Позвонил PDF объяснил Джоном Уинцетон. Большой кредит Джона Уиссинтону, он хороший писатель и очень знает на тему PDF.
Для моих целей два критически важных раздела были обнаружены в главе 4 PDF, объясненной:
- https://www.oreilly.com/library/view/pdf-explained/9781449321581/ch04.html#didentries
- https://www.oreilly.com/library/view/pdf-explained/9781449321581/ch04.html#dates
Исходя из того, что я прочитал, я установил следующие правила:
- Каждое имя поля метаданных должно было быть префиксировано с
/
- Придерживаться имени метаданных, найденных в главе 4
- Следуйте в формате даты, поставляемого в главе 4
Написание кода!
Сейчас вооружен моими правилами, я вернулся в код. Это то, что я придумал:
from datetime import datetime from PyPDF2 import PdfFileMerger pdfs = [ 'images/Django_Crash_Course_5.5x8in.pdf', '_output/dcc.pdf', ] merger = PdfFileMerger() for pdf in pdfs: merger.append(pdf) # Make PDF datestamp now = datetime.now() pdf_datestamp = now.strftime("D:%Y%m%d%H%M%S-8'00'") # https://www.oreilly.com/library/view/pdf-explained/9781449321581/ch04.html#didentries # Fields are **precisely** named merger.addMetadata({ "/Author": 'Daniel Roy Greenfeld, Audrey Roy Greenfeld', "/Title": "Django Crash Course", "/Subject": "Covers Python 3.8 and Django 3.x", "/Creator": "Two Scoops Press", "/CreationDate": pdf_datestamp, "/ModDate": pdf_datestamp, }) # Write the release version = f"beta-{now.strftime('%Y%m%d')}" merger.write(f"releases/{version}.pdf") merger.close()
Вывод
Урок, который я узнал, написание этой маленькой утилиты, так это так же полезно, как переполнение Google и Stack может быть, иногда вам нужно исследовать справочные руководства. Что, если вы спросите меня, очень весело.:-)
Говоря об справочных руководствах, пока я ссылаюсь на онлайн-версию PDF объяснил Чтобы сделать мою работу, я заказал Kindle версию книги. Это меньшее, что я могу сделать.
Оригинал: “https://dev.to/feldroy/adding-metadata-to-pdfs-3adl”