如何把 Xteink X3 变成一台打印机
How to Build a Printer

我原本打算自制电子墨水屏,结果被 Xteink X3 的可编程特性吸引。为了摆脱繁琐的热点上传流程,我决定让它像真正的纸张一样支持打印。通过实现 Internet Printing Protocol 协议,我让 MacBook 能直接识别名为 penguin 的打印机。面对 400 KB RAM 无法容纳 8.4 MB 打印数据的困境,我巧妙利用屏幕显存作为中转,边接收边渲染,最终实现了从 Preview 直接打印漫画页到设备上的功能。现在,这台阅读器不仅能读,还能打印,输出托盘就是 SD 卡里的一个文件夹。
如果它看起来像纸,那它就应该表现得像纸一样。
HN 评论区
45- ValdikSS
>penguin 会把结果缩小以适应屏幕。
>我声明了 A5 和 Letter 纸张,媒体类型为 stationery,输出托盘名为 face-up。
你可以在 `media-size-supported` 中定义屏幕的确切尺寸(而且应该这么做!)。这很可能是一个非标准的 IPP 名称,因此你应该在 `media-supported` 中将其定义为 `om_NNNmmxYYYmm` 或 `oe_NNNinxYYYin`。
这样你就不需要缩放传入的数据了,PC 会直接将数据格式化为屏幕的确切尺寸。
PWG Raster 和 Apple Raster 都支持 1 位/像素模式(而不是你使用的 8 位/像素),因此输入数据量可以减少到原来的八分之一。要实现这一点,请使用 `print-color-mode-{supported,default}=bi-level` 而不是 `monochrome`。同时调整 `urf-supported` 的 `W` 选项,这种情况下使用 `W1`。
屏幕/抖动在 1 位模式下可能效果很差,参见 https://github.com/OpenPrinting/libcupsfilters/pull/160,我在其中添加了更多抖动选项(仅限 Linux,看来 Apple 已经放弃了他们的 CUPS)。
- tapia
在 Linux 上,用 cups 创建这类东西非常简单。不久前,我为我的 Fujitsu Quaderno A4 [1] 写了一个 cups 后端。能够直接在任何支持打印的程序中打开任何文档,然后只需“打印”到我的设备上,这超级有用。
- alternativeworl
太酷了。我原本以为能学到关于墨水、打印头等等的内幕,结果却学到了“如何制造一张像打印机一样工作的纸”,这反而有趣多了。
- e12e
不错。我一直在想,这些设备配合 DjVu 会不会比 pdf 和光栅格式更友好?
- ks2048
干得漂亮,但我还是想知道如何制造一台真正的打印机。