python打印电子标签--ghostscript 和reportlab实现

本项目在两周内紧急开发完成,采用Python结合PyQt5及HTML5实现桌面称重与标签打印功能,涉及串口数据读取、静默打印PDF等技术难点。

最近公司有一个项目,在仓库中对瓜果蔬菜按照规格打包,打包以后需要称重贴上标签。标签上有条形码,商品编码,商品名称,重量,操作员姓名等信息,这些信息存储在后台数据库中。这本来是一个cs架构的应用,在桌面端查询和显示后台的商品信息,选中商品以后开始称重,称重结果由串口传到桌面前端程序,实时展示。手动触发标签打印按钮,打印机打印标签,操作员把标签贴在包装袋上。

整个项目比较急,一开始定的任务只有我一个人,从开发到测试上线的时间不到两个星期。时间比较紧,从技术的角度来看,并没有什么技术难点,但是涉及到的点比较多,而且都是从来没用过的,比如前端页面用什么来画,实时读取电子称串口数据,打印机静默打印等。

初步调研结果,桌面页面用PyQt5来做,编程语言选用python,打印机型号为DL-620,电子称需要能通过usb将数据传到电脑。

后面觉得开发和测试总的时间太短,对需要用到的库都不熟悉,经过讨论更改方案,方案改为,PyQt5实现页面窗体,页面内容用html实现,业务逻辑在本地使用python实现,用到的技术为PyQT5中自带的WebEngineView,这里涉及到python和html之间的数据交互。(一个项目差不多做完,对PyQt相对也熟悉了一些,其实发现存粹用PyQt来实现也不是很复杂,如果有第二版,则全部用Pyqt来做),电子标签的打印也可以用PyQt中的QtextDocument来实现,不过我这里走了一些弯路,先由代码生成pdf文档,再打印,一开始觉得这样做很简单,没想到难点在于pdf文档的静默打印(调研时看到python调取打印接口就几行代码),结果那些代码打印pdf都会先打开pdf文档,然后再打印,在这个任务中这是不被允许的。必须静默打印,这里花了一天半的时间制作pdf和实现静默打印

这里只是简单的记录一下这个项目,以及项目中用到的一些平时很少用到的包

各个环节用到的包如下:

读取串口数据:serial

桌面界面:PyQT5+Html5,其中涉及到的点有:WebEngineView,WebChannel实现python和html中javascript交互(python调用页面中的javascript和javascript调用python代码),这里没有用django这样的框架,如果使用这个框架应该会更加简单,与页面交互的工作由框架完成了,但是此处是cs架构,一个桌面应用程序,没有服务的概念,所以没有使用

python代码生成pdf文档:reportlab包

静默打印pdf文档:hostscript (gswin32),这个工具很强大,但是涉及到的命令行参数也很多,用法和各参数的详细解读这里有一篇很棒的博客:

ghostscript用法详细介绍

我这里用到的静默打印pdfwen文档命令备忘:

>gswin32c -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNOPROMPT -dNumCopies=1 -sDEVICE=mswinpr2 -dFitPage -dDEVICEWIDTHPOINTS=210 -dDEVICEHEIGHTPOINTS=297 -sOutputFile="%printer%DASCOM DL-620Z" "form_letter.pdf"

各参数解释:

-dPrinted:打印,而不是打开到桌面窗体

-dBATCH:执行到最后一页退出

-dNOPAUSE:每一页转换之间没有停顿

-dNOSAFER:通过命令行运行

-q:-dQUIET:执行过程中尽可能减少日志信息

-dNOPROMPT:没有相关提示

-sDEVICE:指定输出设备

dDEVICEWIDTHPOINTS=210 -dDEVICEHEIGHTPOINTS=297 设置打印纸的大小,默认是a4纸,我这里是标签纸,小得多

先简单记录这个项目,后面开放源码到github

 

 

 

 

kyy@kyy-Legion-Y7000P-IRX9:~$ sudo apt update 命中:1 http://mirrors.aliyun.com/ubuntu focal InRelease 命中:2 http://mirrors.aliyun.com/ubuntu focal-security InRelease 命中:3 http://mirrors.aliyun.com/ubuntu focal-updates InRelease 命中:4 http://mirrors.aliyun.com/ubuntu focal-proposed InRelease 命中:5 http://mirrors.aliyun.com/ubuntu focal-backports InRelease 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 有 393 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。 kyy@kyy-Legion-Y7000P-IRX9:~$ sudo apt upgrade 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 正在计算更新... 完成 The following security updates require Ubuntu Pro with 'esm-infra' enabled: libsoup-gnome2.4-1 libpython3.6-minimal python-twisted-core libcups2 libcurl4 gir1.2-soup-2.4 libapt-inst2.0 libssh-4 libpython3.6-dev libgs9 python-twisted-bin libpython3.6-stdlib libcdio17 libfcgi-perl python3-pil libpython3.6 python3.6 libapt-pkg5.0 libprocps6 libvpx5 libsoup2.4-1 python3.6-minimal python-cryptography cups-filters libglib2.0-dev-bin cups-ppdc libcupsmime1 libcurl4-openssl-dev libglib2.0-bin python-pkg-resources libglib2.0-dev ghostscript python-setuptools ghostscript-x libmysqlclient20 libgs9-common cups-filters-core-drivers libcupsppdc1 ca-certificates cups-bsd python-idna cups-core-drivers cups-daemon python3.6-dev python-twisted libcupsimage2 libpoppler73 cups curl libcupscgi1 cups-client cups-ipp-utils libglib2.0-0 python-pil libcurl3-gnutls libssl1.0.0 Learn more about Ubuntu Pro at https://ubuntu.com/pro 下列软件包的版本将保持不变: appstream colord cups cups-bsd cups-client cups-core-drivers cups-daemon cups-filters cups-filters-core-drivers cups-ipp-utils cups-ppdc curl cython dash deja-dup docutils-common dpkg evolution-data-server fwupd fwupdate gazebo9 gazebo9-common gazebo9-plugin-base gdal-data ghostscript ghostscript-x gir1.2-freedesktop gir1.2-glib-2.0 gir1.2-gnomedesktop-3.0 gir1.2-gst-plugins-base-1.0 gir1.2-gtk-2.0 gir1.2-gtk-3.0 gir1.2-ibus-1.0 gir1.2-javascriptcoregtk-4.0 gir1.2-pango-1.0 gir1.2-polkit-1.0 gir1.2-rb-3.0 gir1.2-soup-2.4 gir1.2-webkit2-4.0 gjs glib-networking glib-networking-services gnome-calendar gnome-control-center gnome-control-center-data gnome-initial-setup gnome-power-manager gnome-session-bin gnome-session-common gnome-settings-daemon gnome-shell gnome-shell-common gnome-shell-extension-appindicator gnome-shell-extension-ubuntu-dock gnome-software gnome-software-common gnome-software-plugin-snap gnome-startup-applications gsettings-desktop-schemas gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-pulseaudio gstreamer1.0-x gtk-update-icon-cache gvfs gvfs-backends gvfs-bin gvfs-common gvfs-daemons gvfs-fuse gvfs-libs hplip hplip-data ibus ibus-gtk ibus-gtk3 libalgorithm-diff-xs-perl libappstream-glib8 libappstream4 libboost-atomic-dev libboost-chrono-dev libboost-container-dev libboost-context-dev libboost-coroutine-dev libboost-date-time-dev libboost-dev libboost-exception-dev libboost-fiber-dev libboost-filesystem-dev libboost-graph-dev libboost-graph-parallel-dev libboost-iostreams-dev libboost-locale-dev libboost-log-dev libboost-math-dev libboost-mpi-dev libboost-mpi-python-dev libboost-numpy-dev libboost-program-options-dev libboost-python-dev libboost-random-dev libboost-regex-dev libboost-serialization-dev libboost-stacktrace-dev libboost-system-dev libboost-test-dev libboost-thread-dev libboost-timer-dev libboost-tools-dev libboost-type-erasure-dev libboost-wave-dev libcairo-gobject-perl libcairo-perl libcups2 libcupsimage2 libcurl3-gnutls libcurl4 libcurl4-openssl-dev libdazzle-1.0-0 libebackend-1.2-10 libegl-mesa0 libfcgi-perl libfile-fcntllock-perl libfwupd2 libgail-3-0 libgail-common libgail18 libgazebo9 libgazebo9-dev libgbm1 libgcab-1.0-0 libgdal-dev libgirepository-1.0-1 libgjs0g libgl1-mesa-dri libglapi-mesa libglib-object-introspection-perl libglib-perl libglib2.0-0 libglib2.0-bin libglib2.0-dev libglib2.0-dev-bin libglibmm-2.4-1v5 libglx-mesa0 libgs9 libgs9-common libgstreamer-plugins-base1.0-0 libgstreamer-plugins-good1.0-0 libgtk-3-0 libgtk-3-bin libgtk2.0-0 libgtk2.0-bin libgtk2.0-dev libgtkmm-3.0-1v5 libhdf5-dev libhdf5-openmpi-dev libhpmud0 libhtml-parser-perl libhttp-date-perl libhttp-message-perl libibus-1.0-5 libignition-common libignition-common-dev libio-socket-ssl-perl libjavascriptcoregtk-4.0-18 liblocale-gettext-perl libnautilus-extension1a libnet-dbus-perl libnet-libidn-perl libnet-ssleay-perl libnetcdf-c++4 libnetcdf-cxx-legacy-dev libnetcdf-dev libopencv-calib3d-dev libopencv-contrib-dev libopencv-core-dev libopencv-dev libopencv-features2d-dev libopencv-flann-dev libopencv-highgui-dev libopencv-imgcodecs-dev libopencv-imgproc-dev libopencv-ml-dev libopencv-objdetect-dev libopencv-photo-dev libopencv-shape-dev libopencv-stitching-dev libopencv-superres-dev libopencv-ts-dev libopencv-video-dev libopencv-videoio-dev libopencv-videostab-dev libopencv-viz-dev libpango-1.0-0 libpango1.0-dev libpangocairo-1.0-0 libpangoft2-1.0-0 libpangomm-1.4-1v5 libpangoxft-1.0-0 libpcl-dev libpolkit-agent-1-0 libpolkit-gobject-1-0 libpython3-dev libpython3-stdlib libqt5concurrent5 libqt5core5a libqt5dbus5 libqt5designer5 libqt5designercomponents5 libqt5gui5 libqt5help5 libqt5network5 libqt5opengl5 libqt5opengl5-dev libqt5positioning5 libqt5printsupport5 libqt5qml5 libqt5quick5 libqt5quickparticles5 libqt5quicktest5 libqt5quickwidgets5 libqt5sensors5 libqt5sql5 libqt5sql5-sqlite libqt5svg5 libqt5test5 libqt5webchannel5 libqt5webkit5 libqt5webkit5-dev libqt5widgets5 libqt5xml5 libqtpropertybrowser4 libqwt-headers libqwt-qt5-6 libqwt-qt5-dev libreoffice-avmedia-backend-gstreamer libreoffice-base-core libreoffice-calc libreoffice-common libreoffice-core libreoffice-draw libreoffice-gnome libreoffice-gtk3 libreoffice-help-en-us libreoffice-help-zh-cn libreoffice-impress libreoffice-l10n-zh-cn libreoffice-math libreoffice-ogltrans libreoffice-style-breeze libreoffice-style-galaxy libreoffice-style-tango libreoffice-writer librhythmbox-core10 libsane-common libsane-hpaio libsane1 libsimbody-dev libsmbclient libsocket6-perl libsoup-gnome2.4-1 libsoup2.4-1 libssh-4 libsub-name-perl libtext-charwidth-perl libtext-iconv-perl libtinyxml2-dev libvtk6-dev libvtk6-qt-dev libvtk6.3 libvtk6.3-qt libwbclient0 libwebkit2gtk-4.0-37 libwww-perl libxml-libxml-perl libxml-parser-perl mutter nautilus nautilus-data orca pavucontrol perl perl-base policykit-1 printer-driver-brlaser printer-driver-gutenprint printer-driver-hpcups printer-driver-postscript-hp pyqt5-dev python-asn1crypto python-attr python-automat python-backports.functools-lru-cache python-cairo python-cffi-backend python-chardet python-concurrent.futures python-constantly python-cryptography python-dateutil python-docutils python-enum34 python-hyperlink python-idna python-ipaddress python-netifaces python-nose python-numpy python-olefile python-opengl python-openssl python-pam python-pil python-pkg-resources python-psutil python-pyasn1 python-pyasn1-modules python-pycryptodome python-pygments python-pyparsing python-roman python-service-identity python-setuptools python-sip python-sip-dev python-six python-subprocess32 python-tk python-tz python-u-msgpack python-wxgtk3.0 python-wxtools python-wxversion python-yaml python-zope.interface python3 python3-apt python3-brlapi python3-cairo python3-cffi-backend python3-crypto python3-cups python3-dbus python3-dev python3-distutils python3-gdbm python3-gi python3-gi-cairo python3-lib2to3 python3-markupsafe python3-minimal python3-netifaces python3-pil python3-protobuf python3-renderpm python3-reportlab python3-reportlab-accel python3-simplejson python3-systemd python3-uno python3-yaml qt5-assistant qt5-gtk-platformtheme qt5-qmake qt5-qmake-bin qt5-qmltooling-plugins qtbase5-dev qtbase5-dev-tools qtdeclarative5-dev qttools5-dev qttools5-dev-tools qttools5-private-dev remmina remmina-common remmina-plugin-rdp remmina-plugin-secret remmina-plugin-vnc rhythmbox rhythmbox-plugins samba-libs sane-utils simple-scan sip-dev ubuntu-desktop ubuntu-session ubuntu-software unattended-upgrades ure xdg-desktop-portal xdg-desktop-portal-gtk 升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 393 个软件包未被升级。
06-18
inelx@ubuntu:~/Desktop$ sudo apt update sudo apt upgrade -y Hit:1 http://security.ubuntu.com/ubuntu focal-security InRelease Hit:2 http://security.ubuntu.com/ubuntu jammy-security InRelease Hit:3 http://us.archive.ubuntu.com/ubuntu focal InRelease Hit:4 http://us.archive.ubuntu.com/ubuntu focal-updates InRelease Hit:5 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ InRelease Hit:6 http://us.archive.ubuntu.com/ubuntu focal-backports InRelease Reading package lists... Done Building dependency tree Reading state information... Done 169 packages can be upgraded. Run 'apt list --upgradable' to see them. Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Done The following packages were automatically installed and are no longer required: icu-devtools lib32gcc-s1 lib32stdc++6 libblas-dev libc-dev-bin libc6-i386 libclang-common-10-dev libclang1-10 libcrypt-dev libdeflate-dev libfakeroot libgc1c2 libgfortran-9-dev liblapack-dev libllvm10 liblzma-dev libobjc-9-dev libobjc4 libpcre16-3 libpcre2-16-0 libpcre2-posix2 libpcre32-3 libpcrecpp0v5 libpng-tools libtirpc-dev libzstd-dev linux-hwe-5.15-headers-5.15.0-139 linux-libc-dev Use 'sudo apt autoremove' to remove them. The following security updates require Ubuntu Pro with 'esm-infra' enabled: linux-headers-generic-hwe-20.04 xserver-xorg-core libpython3.8-minimal libsystemd0 libgs9 sudo libpython3.8 python3.8 libblockdev-crypto2 udev linux-image-generic-hwe-20.04 libudev1 systemd-timesyncd linux-generic-hwe-20.04 xserver-xephyr udisks2 python3.8-minimal systemd-sysv libpam-systemd xwayland ghostscript systemd libblockdev-utils2 ghostscript-x libnss-systemd libgs9-common libpython3.8-stdlib libxslt1.1 Learn more about Ubuntu Pro at https://ubuntu.com/pro The following packages have been kept back: bsdutils cups cups-bsd cups-client cups-core-drivers cups-daemon cups-ipp-utils dbus-user-session dbus-x11 distro-info distro-info-data ghostscript-x gir1.2-gdkpixbuf-2.0 gir1.2-gstreamer-1.0 gir1.2-gtk-3.0 gnome-control-center-data gnome-shell-common gnupg gnupg-l10n gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-base-apps gstreamer1.0-plugins-good gstreamer1.0-pulseaudio gstreamer1.0-x gtk-update-icon-cache gtk2-engines-pixbuf hplip-data libblockdev-utils2 libcups2 libcupsimage2 libcurl4 libdbus-1-3 libdpkg-perl libebackend-1.2-10 libebook-1.2-20 libecal-2.0-1 libedata-cal-2.0-1 libgail-common libgail18 libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libglib2.0-bin libgstreamer-plugins-base1.0-0 libgstreamer-plugins-good1.0-0 libgstreamer1.0-0 libgtk2.0-0 libgtk2.0-bin libhpmud0 libldb2 libnautilus-extension1a libnetplan0 libnss-systemd libpam-systemd libperl5.30 libpoppler-glib8 libpoppler97 libpython3-stdlib librsvg2-common libsane-hpaio libudev1 libvte-2.91-common libyelp0 linux-firmware linux-generic-hwe-20.04 linux-headers-generic-hwe-20.04 linux-image-generic-hwe-20.04 nautilus-data netplan.io perl perl-base printer-driver-hpcups python3 python3-gdbm python3-ldb python3-minimal python3-pil python3-protobuf python3-renderpm python3-reportlab python3-reportlab-accel systemd-sysv systemd-timesyncd udisks2 vim-common 0 upgraded, 0 newly installed, 0 to remove and 86 not upgraded.
最新发布
07-13
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值