美文网首页
远程打印文件

远程打印文件

作者: 张胜东 | 来源:发表于2022-11-20 01:53 被阅读0次

<h2>背景</h2><p>之前弄了个网络打印机服务器cups,是可以添加打印机然后发起打印的,而手机、电脑却又只支持在局域网内添加打印机,所以一旦我在外面的话,就无法利用家里的打印机打印了。

</p><h2>命令行打印</h2><p>在之前安装了hplip之后,在命令行里就有了lpr命令,我们就可以用
lpr 文件名
进行打印。

或者,如果没指定默认打印机的话,可以加上 -P 参数
lpr -P 打印机名 文件名
进行打印。

</p><h2>制作上传文件网页,并打印</h2><p>在有了命令行打印的触发方法之后,我们就可以编写一个用来上传文件的网页,并在成功上传后,调用lpr命令触发打印了。

上传文件的网页:
<html>
<head>
<title>File Print</title>
</head>
<body>
<form action='uploader_v1' method="POST" enctype="multipart/form-data">
<label>Choose file to print</label>
<input type="file" name="upload_file" accept="*"/>
<input type="submit" value="submit"/>
</form>
</body>
</html></p><p>
后台程序:
import os
import subprocess
import logging

from flask import Flask, render_template, request, Response, make_response
from gevent.pywsgi import WSGIServer

host = '::'
port = 6311
app = Flask(name, template_folder='site')
app.config['UPLOAD_FOLDER'] = 'site/upload/'

logging.getLogger().setLevel(logging.INFO)
fh = logging.FileHandler("log.log")
fh.setLevel(logging.INFO)
logging.getLogger().addHandler(fh)

@app.route('/')
def upload_root():
return upload_v1()

@app.route('/upload_v1')
def upload_v1():
return render_template('uploader.html')

@app.route('/uploader_v1', methods=['GET', 'POST'])
def uploader_v1():
if request.method == 'GET':
return render_template(r'upload_v1.html')

save_path = app.config['UPLOAD_FOLDER']
os.makedirs(save_path, exist_ok=True)

f = request.files['upload_file']
logging.info(request.files)

upload_file_path = os.path.join(save_path, f.filename)
f.save(upload_file_path)

logging.info(upload_file_path)
p = subprocess.Popen(f'sudo chmod 777 {upload_file_path}', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
logging.info(f"{p.stdout.readlines()}\n\n{p.wait()}")

p = subprocess.Popen(f'lpr -P HP_LaserJet_1020_usb {upload_file_path} -o media=a4', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
resp = f"{p.stdout.readlines()}\n\n{p.wait()}"
logging.info(resp)
return resp


if name == 'main':
# app.run(host='0.0.0.0', port=port, debug=True)
# app.run(host='::', port=port, debug=True)
server = WSGIServer((host, port), app)
print("Server started")
server.serve_forever()</p><p>
在测试中发现,由于我的域名解析是ipv6地址,所以flask里的监听地址就不能设置成常用的 0.0.0.0 了,而是要设置为 :: 。

</p><h2>中文</h2><p>但尝试打印后,发现用命令行打印的文件不显示中文。

</p><h3>设置地区</h3><p>首先,我们先执行 sudo raspi-config ,把里面的 locale 设置为 ZH-CN UTF-8。

然后重启之后再打印,发现还是有部分中文字符无法显示。

</p><h3>安装uming字体</h3><p>经过查资料,发现lpr打印依赖的是uming字体,但是树莓派默认没有安装。所以我们需要执行 sudo apt install fonts-arphic-uming 进行安装。

</p><h2>设置自启动</h2><p>首先我们需要编写一个shell当可执行文件:
#!/bin/sh
cd /home/zsd/lp_site
python main_flask.py
需要注意的是,该shell脚本开头必须指定解释器,不然自启动会会报失败。

接下来,我们添加service文件,sudo vim /usr/lib/systemd/system/lp_site.service
[Unit]

Description=lp_site

[Service]

Type=oneshot

ExecStart=/home/zsd/lp_site/main_flask.sh

[Install]

WantedBy=multi-user.target
然后使能自启动,即可: sudo systemctl enable xx_net.service
</p><p>
</p><div class="image-package"><img src="https://img.haomeiwen.com/i6302584/b6e115497ff23197.jpg" contenteditable="false" img-data="{"format":"jpeg","size":55615,"height":675,"width":783}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div>

相关文章

  • 远程打印文件

    背景 之前弄了个网络打印机服务器cups,是可以添加打印机然后发起打印的,而手机、电脑却又只支持在局域网内添加打...

  • jstack命令以及线程转储堆栈分析

    一、命令介绍 jstack是jdk自带的jvm分析工具,用于打印指定 java进程,core文件 或者远程 调试服...

  • JVM性能调优监控工具之jstack

    二、 jstack 此命令是为Java进程或核心文件或远程调试服务器打印Java线程的堆栈跟踪。jstack可以同...

  • Python Paramiko模块使用

    1 执行远程命令 2 上传文件到远程 3 从远程下载文件

  • 远程copy

    上传本地文件到远程目录 scp 本地文件 远程用户@远程主机ip:远程存储目录及文件名 scp /data/web...

  • jmap

    jmap打印给定进程或核心文件或远程调试服务器的共享对象内存映射或堆内存详细信息 格式: jmap [ optio...

  • JDK自带工具之jmap、jhat

    jmap:是JDK自带的内存映像工具。主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射...

  • Java命令: Jmap

    Jmap jmap是JDK自带的工具软件,主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存...

  • 2020-08-16

    事件:家里的打印机无法远程打印,告诉老公打印合同并连接好打印机。事隔三天还是无法无线打印。问他打印机还是无法打印,...

  • linux的scp和sftp简单使用

    scp 远程拷贝文件的命令 远程下载文件到本地目录 远程下载目录到本地 上传文件到远程机器指定目录 上传本地目录到...

网友评论

      本文标题:远程打印文件

      本文链接:https://www.haomeiwen.com/subject/betbxdtx.html