Редактировать метаданные с помощью Pikepdf

Кто-нибудь с опытом редактирования метаданных PDF с помощью pikepdf?

Я установил эту библиотеку, так как у других библиотек есть проблемы с оглавлением и / или закладками. Я также пробовал pdfrw, но эта библиотека не смогла перезаписать существующие значения, поэтому теперь я попробую pikepdf.

В документации говорится:

Откройте метаданные в блоке with, чтобы открыть его для редактирования. При выходе из блока изменения фиксируются (обновляются XMP и словарь Document Info) и прикрепляются к объекту PDF. PDF-файл должен быть сохранен. Если в блоке возникает исключение, изменения отменяются.

In [4]: with pdf.open_metadata() as meta:
   ...:     meta['dc:title'] = "Let's change the title"

Я пробовал этот подход, используя функцию:

from pikepdf import Pdf

def add_metadata(source_pdf, author, title, out_dir):
    with Pdf.open(source_pdf) as pdf:
        with pdf.open_metadata() as meta:

            meta['dc:title'] = title
            meta['dc:creator'] = author
    
        pdf.save(os.path.join(out_dir, os.path.basename(source_pdf)))

После сохранения ничего не изменилось. Я упустил что-то очевидное?

Если я добавляю точку останова в функцию и пытаюсь проверить существующие значения, я получаю сообщение об ошибке "Ключ не найден". Итак, я предполагаю, что это часть проблемы - я не могу получить доступ к правильным ключам, но как я могу увидеть, какие пары ключ-значение существуют в этом объекте, который возвращается open_metadata()? Если я напечатаю "мета-объект" как есть, я получу следующее:

<x:xmpmeta xmlns:x="adobe:ns:meta/"
            x:xmptk="XMP toolkit 2.9.1-13, framework 1.6">
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
            xmlns:iX="http://ns.adobe.com/iX/1.0/">
        <rdf:Description xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
                        rdf:about="Q"
                        pdf:Producer="GPL Ghostscript 8.70"/>
        <rdf:Description xmlns:xmp="http://ns.adobe.com/xap/1.0/"
                        rdf:about="W">
            <xmp:ModifyDate>2020-05-28T09:26:1Z</xmp:ModifyDate>
            <xmp:CreateDate>2020-05-28T09:26:1Z</xmp:CreateDate>
            <xmp:CreatorTool>XYZ</xmp:CreatorTool>
        </rdf:Description>
        <rdf:Description xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
                        rdf:about="E"
                        xapMM:DocumentID="R"/>
        <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/"
                        rdf:about="T"
                        dc:format="application/pdf">
            <dc:title>
                <rdf:Alt>
                    <rdf:li xml:lang="x-default">Unknown</rdf:li>
                </rdf:Alt>
            </dc:title>
            <dc:creator>
                <rdf:Seq>
                    <rdf:li>user-id,S-D-F-G-12345678</rdf:li>
                </rdf:Seq>
            </dc:creator>
        </rdf:Description>
    </rdf:RDF>
</x:xmpmeta>

print(meta.keys()) -> KeysView(<pikepdf.models.metadata.PdfMetadata object at 0x000001E4024306A0>)

list(meta.keys()) -> []

Кто-нибудь может указать мне правильное направление, пожалуйста? Как изменить значения "Неизвестно" и "идентификатор пользователя,SDFG-12345678"?

1 ответ

Обходной путь: удалите все метаданные, а затем добавьте новые.

Другие вопросы по тегам