windows - 如何让 emacs 正确打印 pdf?
问题描述
如果你走过 emacs 的道路,你就会知道它有多么强大,又是多么无用。
完全披露:我的 4800 行初始化文件(即将成为 3000)确实设法在 27.5 秒内加载 125 个有用的包,这要归功于 org-babel 和 use-package——但我仍然没有设法将它哄骗到打印 pdf . 哦,emacs,最简单的东西对吧?
因此,当然,emacs 专家的人数正在减少,原因很明显,但我猜这里至少有一些人已经完全征服了 emacs。唉,我还不是你们中的一员。(然而!)
我的配置,2019 年 4 月 17 日的 26.2(构建 1,x86_64-w64-mingw32),使用 ImageMagic 7 支持、pdftools、aspell 6(我没有使用)和许多其他 Windows 就绪 gem 编译,仍然推动将 postscript 直接导入我的不兼容 postscript 的激光打印机,它会立即吐出 28 页垃圾。BLLLLpt。
诚然,我对引擎盖下的打印知之甚少,但我知道emacs 仍然排在最后——打印pdf 并不难。所以这里是设置:
适用于 windows 的 Ghostscript 和 ghostview 已安装,并添加到路径中。Pdftools 运行良好,在打开 pdf 时会覆盖 docview。初始化代码很短。
(require 'printing)
为了更好的衡量:
(add-to-list 'load-path "C:/Program Files (x86)/Ghostgum/gsview/gsview32.exe")
(add-to-list 'load-path "C:/Program Files/gs/gs9.26/bin/gswin64c.exe")
命令(我更喜欢通过 pr-path-alist 设置它们,但是,这没有多大意义)。
(setq pr-gs-command "C:/Program Files/gs/gs9.26/bin/gswin64c.exe")
(setq pr-ps-command "C:/Program Files/gs/gs9.26/bin/gswin64c.exe")
(setq lpr-command "C:/Program Files/gs/gs9.26/bin/gswin64c.exe")
(setq ps-lpr-command "C:/Program Files/gs/gs9.26/bin/gswin64c.exe")
(setq ps-lpr-switches '("-q" "-dNOPAUSE" "-dBATCH" "-sDEVICE=mswinpr2" "-sPAPERSIZE=a4"))
(setq pr-temp-dir "c:/emacs/.emacs.d/temp/")
我尝试了几件事,ps-print.el 方法和printing.el 方法。我更喜欢使用printing.els pr-interface,因为它很简单。
lpr 缓冲区和 lpr 区域
将打印作业发送到假脱机,再也找不到了。我的打印机是兄弟激光打印机,网络上唯一的一台,lpr不应该比postscript好吗?好吧,这里什么也没有发生。
print-buffer print-region 使用选项进行假脱机,但没有发送到打印机(假脱机也不做任何事情)。
ps-打印缓冲区
打印文本文档!然而,它会吐出 28 页带有 pdf 的垃圾。
pr-ps-打印缓冲区
假脱机,什么都没有发生
pr-ps-缓冲区预览
打开 gsview(带有烦人的注册弹出窗口)并预览打印作业
pr-ps-region-using-ghostscript
28页垃圾。
因此,我似乎可能缺少一些基本知识。Ghostscript 应该填写在 postscript 和非 postscript 或 pcl 驱动程序之间,是吗?
我错过了图书馆吗?还是我只需要更好地配置初始化?
有没有人知道我在说什么?
解决方案
我知道这不是一个完整的答案,但是评论太长了。
Ghostscript 不会在驱动程序之间“填充”。mswinpr2 设备的工作原理是(抽象地省略细节)将输入渲染到位图,为打印机创建一个 DeviceContext,在设备上下文上绘制位图,然后告诉 DC 自己打印。
基本上它会渲染输入,然后使用 Windows 打印系统来完成繁重的工作。所以你需要能够从 Windows 打印到你的打印机,我假设你已经可以做到这一点:-)
您是否尝试过在 Windows 命令外壳中使用 Ghostscript 命令行?有效果吗?
如果输入是 PDF,Ghostscript 不会“将 PostScript”“推送”到您的打印机中。除了“兄弟”之外,您还没有确切说明您使用的是哪种打印机,知道它会很有用。例如,它是 PCL、PostScript 还是“其他”打印机。
最好知道打印的前几个字节是什么,看看它是 PDF 文件的开头还是其他格式。
我怀疑您是否真的在启动 Ghostscript,您是否获得了打印机选择器对话框?您的命令行似乎没有指定打印机,或 QueryUser 开关以使用默认打印机,您也没有选择 /NoCancel,所以我希望您看到一个进度对话框。
尝试添加-dQueryUser=1
到您的 Ghostscript 命令行,如果您没有得到打印机选择器对话框,那么您没有运行 Ghostscript。
恐怕我无法就为什么会这样提出任何建议。
推荐阅读
- mysql - (async) 使用 sequelize 和 node 在 mysql 数据库中创建多个寄存器
- excel - 是否可以使用 maatwebsite 修改现有的 excel 文件?
- python - ValueError:无法将字符串转换为浮点数 - kmeans(熊猫)
- sql - 我可以在一个查询中选择 2 列上的 DISTINCT 并按 1 列分组的总和吗?
- node.js - Firestore 查询有时不包含更新的数据
- reactjs - 如何在 reactjs 中将道具传递给另一个组件
- python - 在生成无限数据时,PyTorch 的 __len__ 应该是什么?
- java - 试图捕捉特定的 ConstraintViolationException
- sql - SQL UNION 运算符如何识别重复项
- javascript - 如何忽略网页上的“无法读取未定义的属性'用户名'”