Рубрики
Без рубрики

Добавление метаданных в PDFS

Как использовать Python, чтобы объединить PDFS, а затем добавлять их метаданные. Теги с Python, книгами, Джанго, сегодня предшествующим.

Для обоих 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, объясненной:

Исходя из того, что я прочитал, я установил следующие правила:

  • Каждое имя поля метаданных должно было быть префиксировано с /
  • Придерживаться имени метаданных, найденных в главе 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”