reddit / emacs

Update PDF metadata using Emacs?

graduale · 2022-01-31 22:36
I'm trying to find a way of using a `.bib` file to populate the metadata of PDFs associated with any entry in my `.bib` file. In my current setup, I have an easy way of getting the path to any PDF associated with my an entry in my main `.bib` file. If I could modify the metadata of a PDF, I might be able to then use the information in the BibTeX entry to update the metadata of the associated PDF. Is there some way of modifying the metadata of a PDF from within Emacs? I keep searching online but most results I find are about attempts to extract information from the metadata in a PDF.
gjolleyrogers · 2022-02-01 01:33
Cb2bib is an app that does this outside of emacs. There’s source code. And it works well enough for me.
graduale · 2022-02-01 02:29
From what I can tell, `c2bib` outputs bibtex entries from metadata. What I want is the reverse: output metadata for a given file with a bibtex entry as input. Am I missing something?
m4xxed_v1 · 2022-02-01 03:33
I use jabref for reference management and it can write metadata from the bibtex entries in my bib file to the pdfs. I don't know whether it can do that in bulk, though. Maybe a starting point?
art_else · 2022-02-01 10:45
Am looking for a way to edit metadata in pdfs as well, expected pdf-tools to have this aboard, but unfortunately it doesn't. You could try the wrapper around `exiftool` on Melpa.
graduale · 2022-02-01 18:15
Ah I didn’t know there was such a thing. Thanks!
graduale · 2022-02-01 18:35
Actually I can’t find the wrapper you mentioned. Any chance you can give me the name?
art_else · 2022-02-01 20:47
[https://melpa.org/#/exiftool](https://melpa.org/#/exiftool) ;) I haven't worked with it yet myself, but `exiftool` itself is an amazing project.
graduale · 2022-02-01 21:14
Hah. That's what you get from relying on search engines for this. (DuckDuckGo search for "emacs exiftool", at least, doesn't lead me to that page!) Thanks again!
graduale · 2022-02-01 21:18
Hm, looks like it only works with JPEG files, sadly... I'll see if I can adapt something from it for my purposes, though.
oantolin · 2022-02-01 23:39
In addition to exiftool, pdftk can also edit PDF metadata.
art_else · 2022-02-02 21:29
Please report back when you got something.
graduale · 2022-02-04 23:48
Nothing too fancy, but it's kind of working so far. There are a few issues still, especially with passing some markup to `exiftool`, but I'll put this here in case anyone can do something better with it. At the moment this relies on `citar`, since it's what I use. I'm looking to tag this on to a function for moving PDF files to the sole member of `citar-library-paths`, so that in moving the pdf and renaming it using the citation key, the metadata gets updated automatically... ```elisp (defun my/citar--update-pdf-metadata (key) "If KEY has a .pdf file associated with it, update its metadata information to include author and title values from the entry associated with KEY." (let* ((default-directory (file-truename (car citar-library-paths))) (entry (citar--get-entry key)) (author-metadata (cond ((citar-has-a-value '(author) entry) (concat "-Author=\"" (citar-get-value "author" entry) "\"")) ((citar-has-a-value '(editor) entry) (concat "-Author=\"" (citar-get-value "editor" entry) " (ed.)" "\"")))) (title-metadata (concat "-Title=\"" (cdr (assoc-string "title" (citar--get-entry key))) "\""))) (if (file-exists-p (concat key ".pdf")) (progn (copy-file (concat key ".pdf") "citar-library-backup/" 1) (shell-command (concat "exiftool " "-overwrite_original_in_place " author-metadata " " title-metadata " " key ".pdf"))) (print (concat "Could not find a file associated with key " key " in " default-directory)) ))) ```
art_else · 2022-02-19 23:45
Thanks, will give it a try, but likely will adapt to my needs.
graduale · 2022-02-20 00:48
Let me know what you come up with!