QZ托盘输出打印条形码质量低



我尝试使用 qz 托盘打印标签,我的技术规格是:

  • 反应网络应用程序
  • 从API获取数据,然后使用html2pdf将其呈现为html元素.js将其转换为pdf
  • 将 pdf 转换为 base64 字符串并将其送入 qz 托盘
  • 我可以看到 html 元素以及 pdf 输出。一切都很好。

问题是,标签输出有一个CODE128条形码,当我尝试扫描它时,它是不可读的。我尝试扫描pdf,它工作正常。尝试调整html,html2pdf.js配置和qz,但看起来输出永远不会在高分辨率输出中。

我的QZ托盘代码:

const qzPrinter = qz.printers.find("Wincode C342 (Copy 3)");
const funcUpdateLoading = this.updateLoading;
qzPrinter().then(function(printer) {
let objPrinter = printer;
var config = qz.configs.create(objPrinter, {
margins: { left: 0.1, bottom: 0.1 }
});
var source = window.document.getElementById("dummyAwb").innerHTML;
var opt = {
margin: [0,0],
filename: "myfile.pdf",
image: { type: "jpeg", quality: 1 },
html2canvas:  { dpi: 192, letterRendering: true },
jsPDF: { unit: "mm", format: [365, 305], orientation: "portrait" },
pagebreak: { mode: "avoid-all", before: ".akhirTable" }
};
html2pdf()
.set(opt)
.from(source)
.toPdf()
.output("datauristring")
.then(function(pdfAsString) {
let arrStr = pdfAsString.split(",");
var data = [
{
type: "pdf",
format: "base64",
data: arrStr[1]
}
];
qz.print(config, data).then(function() {
funcUpdateLoading();
});
});
});

可以请有人指出,如何调整qz托盘的质量吗?蒂亚

[...] 如何调整QZ托盘的质量?

您有三个主要因素影响质量。

  1. HTML2pdf
  2. QZ 托盘
  3. 条形码

HTML2pdf

根据html2pdf的页面,它使用html2canvas来呈现其内容:

html2pdf使用 html2canvas 和 jsPDF 将任何网页或元素完全在客户端转换为可打印的 PDF。

此方法的缺点是,您将内容作为光栅图形抓取,从而删除任何矢量打印数据。 更糟糕的是,它是网络分辨率,通常是 96 dpi。

幸运的是,html2pdf 使用html2canvas进行渲染,因此使用自定义{ scale: ...}选项可以获得更好的分辨率:

var opt = {
... 
html2canvas:  { scale: 6 },
...
};

比例可以通过将目标 DPI 除以 96 来计算。 例如,大多数打印机都是600 dpi,因此67的比例因子将相当不错。

最终应该考虑的另一个因素是图像压缩jpeg的选择。png通常会产生更高质量的结果,但是,可能需要垫片。


QZ 托盘

QZ托盘可以打印PDF,图像,HTML以及"原始"文档。

这里选择使用 PDF 很有趣,因为 QZ Tray 可以直接打印 HTML 内容,但假设您确定要使用 PDF,强烈建议您提供配置选项{ rasterize: false }

var config = qz.configs.create("Printer Name", { rasterize: "false" });  // use vector rendering

此选项将阻止 QZ 托盘在打印时创建另一个光栅图形。 请注意,从 QZ 纸盒 2.1 开始,此选项已默认关闭。


条形码

标题提出了以下声明:

条形码质量低

为了使条形码以与上述相同的质量呈现,条形码还必须以可缩放的分辨率呈现。 这意味着,条形码图像的大小应与相同的比例因子相当(例如 6x(。

您可以通过利用矢量条形码来避免拥有大条形码。 大多数条形码库提供各种选项(例如.PNG、SVG 等(。 矢量将使用 SVG 或自定义 HTML(例如带有背景颜色的div(,它们将使用上述实用程序正确缩放。 例如,JsBarcode 将 SVG 元素呈现到页面,该元素将无限扩展,而无需特殊的大小乘数。


总结

结合这些上述技术应该会产生高质量的印刷品。 值得注意的是,有几种方法可以呈现HTML以准备打印机,并且您可能很高兴使用其他技术,例如:

  • 服务器端 PDF 渲染,这将产生矢量图形(例如FPDFmPDFDOMPDFwkhtmltopdfTCPDF(

    --或--
  • 直接为 QZ 托盘使用准备 HTML

最新更新