преобразовать текстовый буфер в файл PDF?

15

Как мы можем преобразовать текущий текстовый буфер в файл PDF, предпочтительно превратив заголовки, начинающиеся с *, в закладки файла PDF. Например, превращение интегрированного учебника Emacs (показанного Ch t) в файл PDF с закладками. Благодарю.

Тим
источник
2
Посмотрите на экспорт из org-modeв LaTeX / PDF .
PythonNut
2
в частностиorg-latex-export-to-pdf
Кейси
6
Просто ради разнообразия: вы можете сделать, C-u M-x ps-print-bufferа затем преобразовать полученный файл PostScript в PDF (если ваши файлы не являются файлами Org, и вы просто хотите иметь формат PDF в виде простого текста). Точно так же, ps-print-buffer-with-facesкак это звучит.
wvxvw
@PythonNut:C-c C-e is undefined
Тим
@casey: команда не найдена
Тим

Ответы:

13

Вы можете поместить ниже в свой init.elи привязать функцию к привязке по вашему выбору.

Функция по умолчанию печатает файл в текущем буфере в формате PDF в той же папке.

Здесь функция требует двоичный файл ps2pdfдля преобразования .psв .pdf. Но вы можете заменить это любым доступным генератором PDF в вашей системе.

(require 'ps-print)
(when (executable-find "ps2pdf")
  (defun modi/pdf-print-buffer-with-faces (&optional filename)
    "Print file in the current buffer as pdf, including font, color, and
underline information.  This command works only if you are using a window system,
so it has a way to determine color values.

C-u COMMAND prompts user where to save the Postscript file (which is then
converted to PDF at the same location."
    (interactive (list (if current-prefix-arg
                           (ps-print-preprint 4)
                         (concat (file-name-sans-extension (buffer-file-name))
                                 ".ps"))))
    (ps-print-with-faces (point-min) (point-max) filename)
    (shell-command (concat "ps2pdf " filename))
    (delete-file filename)
    (message "Deleted %s" filename)
    (message "Wrote %s" (concat (file-name-sans-extension filename) ".pdf"))))
Каушал Моди
источник
2

Это не решает конкретную проблему закладок в PDF, но решает общую проблему преобразования буферов в PDF.

Если вы хотите получить «скриншот» PDF буфера в том виде, в каком вы его видите - без отображения скрытого текста - тогда хорошей альтернативой будет htmlize буфера и преобразовать результат из HTML в PDF. Вы можете использовать это, например, для создания PDF-версии вашей программы Org. (Обратите внимание , что ps-printоснованный ответ от Kaushal Моди бы показать скрытый буфер содержимого.)

рецепт приготовления

M-x htmlize-buffer RET, C-x C-w buf.html RET; затем запустите в командной строке:

pandoc --from=html --to=latex --variable geometry="landscape" -o buf.pdf buf.html

пример (скриншот)

введите описание изображения здесь

Смотрите также

Здесь есть интересное обсуждение «векторных скриншотов»: Могу ли я сделать векторные (SVG) скриншоты Emacs? (то, что я описал, можно рассматривать как очень ограниченный пример «векторного скриншота».)

Джо Корнели
источник
2

Вы можете C-u M-x ps-print-bufferраспечатать текущий буфер в файл PS, а затем передать его по конвейеру ps2pdf.

Arne
источник