局域网共享打印机的另类实现(clawPDF)

win10更新有时会导致打印机共享失败,在网上寻找解决办法,都不能解决目前共享失败的问题,于是萌发了在客户端生成PDF文件,服务端打印的想法,发现网络上已经有利用开源虚拟打印机clawPDF生成本地PDF,上传后打印的文章,比如kkprint,决定动手试验。

需要的工具:clawPDF(官网下载),PDFtoPrinter.exe,服务端采用Python的pyftpdlib库架设FTP服务。

服务端:

import subprocess

import sys

import os

#import win32api

sys.path.append("c:\\users\\administrator\\appdata\local\\programs\\python\\python38\\lib\\site-packages")

import win32print

from pyftpdlib.handlers import FTPHandler

from pyftpdlib.servers import FTPServer

from pyftpdlib.authorizers import DummyAuthorizer

# :param cprinter: 调用的打印机名称

# :param pdf: pdf文件的绝对路径

#print(
win32print.GetDefaultPrinter()) # 获取默认打印机名称

#print(win32print.EnumPrinters(3)) # 获取所有打印机列表

class MyHandler(FTPHandler):

def on_disconnect(self):

# do something when client disconnects

pass

def on_login(self, username):

# do something when user login

pass

def on_logout(self, username):

# do something when user logs out

pass

def on_file_sent(self, file):

# do something when a file has been sent

pass

def on_file_received(self, file):

# do something when a file has been received

print("file re")

if sys.platform == 'win32':

args = [#f"{os.path.dirname(__file__)}\plug\PDFtoPrinter.exe",

f"d:\\PDFtoPrinter.exe",

f"{file}",

#f"{cprinter}",

]

subprocess.run(args, encoding="gb2312", shell=True)

print(f"\t|已发送至打印机")

pass

def on_incomplete_file_sent(self, file):

# do something when a file is partially sent

pass

def on_incomplete_file_received(self, file):

# remove partially uploaded files

import os

os.remove(file)

# 新建一个用户组

authorizer = DummyAuthorizer()

# 将用户名,密码,指定目录,权限 添加到里面

authorizer.add_user("zw", "zw", "d:\\ftpfile", perm="elradfmw") # adfmw

# 这个是添加匿名用户,任何人都可以访问,如果去掉的话,需要输入用户名和密码,可以自己尝试

authorizer.add_anonymous("d:\\ftpfile")

handler = MyHandler

handler.encoding = 'gbk'

print(handler.encoding)

handler.authorizer = authorizer

# 开启服务器

server = FTPServer(("192.168.2.43", 21), handler)

server.serve_forever()

客户端:

安装clawPDF,

文件参数设置

自动保存

目标文件夹自己建一个,记得定期清理

返回后点击动作

客户端和服务端完成,打印时在打印机选择框选择clawPDF,clawPDF会在生成本地PDF文件后自动上传至FTP服务器,FTP服务器在接收上传文件后调用PDFtoPrinter.exe将PDF文件在打印机打印出来。如果存在PDF文件名乱码问题,需要将pyftpdlib组件中filesystem.py、handlers.py文件里所有“utf8”替换成“gbk”。实际使用中,文件名乱码不影响使用。

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在CentOS下安装CUPS来实现局域网共享HP1020打印机的步骤如下: 1. 首先,确保CUPS已安装在CentOS系统中。可以使用以下命令来安装CUPS: ``` sudo yum install cups ``` 2. 安装完成后,启动CUPS服务并设置其在系统启动时自动启动。可以使用以下命令来完成此操作: ``` sudo systemctl start cups sudo systemctl enable cups ``` 3. 验证CUPS服务是否成功启动。可以在Web浏览器中输入以下地址来访问CUPS管理界面: ``` http://localhost:631/ ``` 4. 在CUPS管理界面中,单击"Administration"选项卡,然后选择"Add Printer"来添加打印机。 5. 在"Add Printer"页面中,选择要添加的打印机品牌和型号。选择正确的驱动程序以确保打印机能够正常工作。 6. 如果在列表中没有找到适合您的打印机型号的驱动程序,则可以尝试通过“Generic”或“Postscript”驱动程序进行设置。 7. 在接下来的步骤中,您需要提供有关您的打印机的一些基本信息,例如打印机名称、描述和位置。您还可以选择共享打印机以供其他计算机访问。 8. 确认设置后,单击"Continue"按钮并按照提示完成添加打印机的设置。 9. 在有多台计算机的局域网中,其他计算机可以通过访问CUPS管理界面来查找并添加共享打印机。其他计算机只需安装适用于其操作系统的CUPS客户端。 通过上述步骤,您应该能够在CentOS系统上安装CUPS并实现局域网共享HP1020打印机
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值