将文本缓冲区转换为pdf文件?


15

我们如何将当前的文本缓冲区转换为pdf文件,最好将那些以*开头的标题转换为pdf文件的书签。例如,将Emacs集成教程(由Ch t显示)转换为书签的pdf文件。谢谢。



2
特别是org-latex-export-to-pdf
casey 2015年

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
蒂姆(Tim)

@casey:找不到命令
Tim

Answers:


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“屏幕快照”,而不是显示隐藏的文本,那么一个不错的选择是对缓冲区进行html处理,然后将结果从HTML转换为PDF。例如,您可以使用它来构建组织议程的PDF版本。(请注意,ps-print来自Kaushal Modi 的基于答案将显示隐藏的缓冲区内容。)

食谱

M-x htmlize-buffer RETC-x C-w buf.html RET; 然后在命令行上运行:

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

示例(屏幕截图)

在此处输入图片说明

也可以看看

这里有一个有关“矢量屏幕截图”的有趣讨论: 我可以拍摄Emacs的矢量(SVG)屏幕​​截图吗?(我所描述的内容可以看作是“矢量屏幕截图” 的非常有限的示例。)


2

您可以C-u M-x ps-print-buffer将当前缓冲区打印到PS文件,然后将其通过管道传输ps2pdf

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.