Some time ago there was a discussion on the Emacs mailing list about making screenshots from Emacs. From one of the posts there I learned about the x-export-frames function, whose existence is fascinating for me. It basically allows you to make a screenshot of your Emacs frame without ay external program, in one of several formats (including pdf and png). Jean Louis provided some simple code in that post which I reproduce here (with minor changes). The frameshot command takes a picture of your current Emacs frame, puts is in the frameshot-directory directory and moves the point to its line.
(defvar frameshot-directory "~/Pictures/Screenshots/"
"Default directory for frame shots.")
(defvar frameshot-format 'png
"Default frame shot format.")
(defun frameshot ()
"Save Emacs frame as frame shot.
Directory is determined by variable `frameshot-directory' and if
not defined, it will be saved in the `$HOME' directory."
(interactive)
(let* ((image (x-export-frames nil (or frameshot-format 'png)))
(base-directory (or frameshot-directory (getenv "HOME")))
(directory (concat (file-name-as-directory base-directory)
(format-time-string "%Y/%m/%Y-%m-%d/")))
(file (concat directory (format-time-string "Screenshot-%Y-%m-%d-%T.")
(symbol-name frameshot-format))))
(make-directory directory t)
(with-temp-file file
(insert image))
(dired directory)
(revert-buffer)
(dired-goto-file (expand-file-name file))
(message "Frame shot saved as `%s'" file)))
Even after 20 years Emacs never ceases to astonish me!