搜索
bottom↓
回复: 2

在Linux下实现自动打印功能的文件夹,可间接实现手机网络打印

[复制链接]

出220入1491汤圆

发表于 2021-7-30 22:03:24 | 显示全部楼层 |阅读模式
本帖最后由 cne53102 于 2021-7-30 22:14 编辑

这个标题起的不太好,但暂时没想到更好的描述方法。

看到站长的这个帖子:https://www.amobbs.com/thread-5753274-1-1.html

我这个方法站长大概用不上,因为站长很可能用的不是linux,而且我这个方法只确认到打印pdf完美,对word和excel的支持很可能不完美。

另外我并不是什么linux高端玩家,是真菜鸟,这个是照葫芦画飘出来的,好使是肯定好使,但可能是笨方法,发出来也省得自己日后忘记,如果有更好地方法,务必分享一下。

具体环境如下:
NAS服务器运行lubuntu系统(如果是ubuntu也一样的)(没错我装的就是桌面版)
通过/etc/fstab开机自动挂载硬盘和一个1GB的ramdisk(tmpfs)
然后用samba共享他们,可以在windows里映射网络驱动器访问他们,手机的文件管理器的网络存储里(三星)也可以看到他们,电视也可以访问里面的视频。
samba是可以共享插在服务器上的打印机的,然后windows添加网络打印机就可以使用了。
但手机并不能直接使用,安卓的打印功能添加打印机时,似乎只能是专门的支持网络功能的打印机。
(手机似乎有个叫printerShare的软件可以干这种事,但好像不怎么好用)
对于这种情况,可以在服务器端这样做:

在ramdisk中建立一个文件夹“autoprint”(不是非得ramdisk不可,只是这样不损耗硬盘寿命)
然后命令行
sudo apt-get install inoticoming
安装inoticoming,这个inoticoming是用来监视一个目录下有没有新增加的文件的。
然后命令行
mkdir -p ~/bin
在当前用户目录下建立一个bin文件夹
leafpad ~/bin/autoprinter
这个leafpad是文本编辑器,如果是ubuntu,可能应该使用gedit,你喜欢vim也可以(没用过的话不要在这里进行初次尝试)
反正就是新建一个文件“autoprinter”然后打开编辑它,输入下面的内容,然后保存。

#!/usr/bin/env bash
FILE="$1"
if [ "${FILE##*.}" = "pdf" ]
then
    lpr "$2/$1" && rm "$2/$1"
fi
if [[ "${FILE##*.}" = "jpg" ]] || [[ "${FILE##*.}" = "png" ]] || [[ "${FILE##*.}" = "bmp" ]]
then
    convert "$2/$1" -background -white -page a4 "$2/${FILE%.*}.pdf" && rm "$2/$1"
fi
exit 0

lpr是打印,rm是删除,convert是使用imagemagick吧jpg和png和bmp转换成pdf(这个imagemagick很强大的,研究研究很有意思)
逻辑就是遇到pdf就打印,然后就删掉文件,遇到jpg,png或bmp就转换成pdf,然后删掉文件,下一次就会按照pdf文件打印。
然后命令行
chmod +x ~/bin/autoprinter
让它变成可执行的
然后命令行
sudo inoticoming /你的共享目录/ramdisk/autoprint ~/bin/autoprinter {} /你的共享目录/ramdisk/autoprint \;
这样inoticoming就开始监视"/你的共享目录/ramdisk/autoprintzg"这个文件夹,(一定要用sudo,否则删除文件时会没有权限)
里面出现新文件就会执行刚才写的autoprinter,autoprinter遇到pdf就会打印,遇到图片就转换成pdf,转换成pdf时inoticoming就又会执行autoprinter,这一次就会按照pdf打印,处理后的文件都会删掉。

实际使用起来的效果就是,文件丢入autoprint文件夹后,打印机就开始工作了,然后文件就消失了,然后文件就从打印机吐出来了。
这样手机不能直接使用网络打印机,能访问共享目录即可,只要把要打印的文件复制到autoprint文件夹里,就会开始打印。

前面的inoticoming是手动执行的,如果要开机自动启动,那把那行加入/etc/init.d就可以了。

对于office文件doc, docx, xls, xlsx(是叫xlsx来着?),应该可以使用liberoffice或pandoc转换,但我暂时没有进行尝试。
有兴趣的可以按前面转换图片的方法照葫芦画瓢试试office文件的转换(或者采用比那个IF更优雅的方法…if u can…)
liberoffice或pandoc的命令行参考:
soffice --headless --convert-to pdf filename.doc
pandoc -o output.pdf -f docx input.docx

出0入17汤圆

发表于 2021-7-30 22:39:50 | 显示全部楼层
本帖最后由 Clamfly 于 2021-7-30 22:50 编辑

单是手机用的话, 不用那么麻烦的, android 默认的 print service 使用IPP协议(Internet Printing Protocol), 1.5版本以后的CUPS已经支持IPP了, 配置好cups就能在android发现你的打印机了.
IPP是独立于samba的.

参考 :
https://android.stackexchange.com/questions/43774   (找 IPP Everywhere)
https://wiki.debian.org/CUPSIPPE ... irect=IPPEverywhere
https://wiki.archlinux.org/title ... ing#Printer_sharing


编辑原因:  改错字

出220入1491汤圆

 楼主| 发表于 2021-7-30 23:27:14 | 显示全部楼层
Clamfly 发表于 2021-7-30 22:39
单是手机用的话, 不用那么麻烦的, android 默认的 print service 使用IPP协议(Internet Printing Protocol) ...

噢~看着不错,感谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 -- 东莞阿莫电子网站 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2022-9-28 15:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表