前言
最近在实现批量打印pdf文件的功能,发现pdf-to-printer可以实现需求,支持以下功能:
- 获取打印机列表
- 获取默认打印机
- 发送文件到指定的打印机
但是在使用过程中发现如果电脑上存在中文名称的打印机列表,返回的数据是乱码的。查看源码发现插件内部调用了powershell执行了相关命令,而从powershell返回来的数据就是乱码的,因此问题的关键就是解决powershell中文乱码。
解决方法
找到node_modules下面的pdf-to-printer源码,修改get-printers.ts文件,在powershell的命令中增加如下代码:
chcp 65001;
注意,这个分号不能丢,表示同时执行,65001表示utf8编码,完整代码:
try {
throwIfUnsupportedOperatingSystem();
const { stdout } = await execFileAsync("Powershell.exe", [
"-Command",
`chcp 65001;Get-CimInstance Win32_Printer -Property DeviceID,Name,PrinterPaperNames`,
]);
return stdoutHandler(stdout);
} catch (error) {
throw error;
}
修改后重新执行npm run build编译,然后把编译后的文件替换node_modules下pdf-to-printer里面的dist。

其他
这样修改后,如果重新安装了依赖会导致修改丢失了,所以建议使用package-patch来修改源码。
评论区