我尝试使用 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托盘的质量?
您有三个主要因素影响质量。
- HTML2pdf
- QZ 托盘
- 条形码
HTML2pdf
根据html2pdf的页面,它使用html2canvas来呈现其内容:
html2pdf
使用 html2canvas 和 jsPDF 将任何网页或元素完全在客户端转换为可打印的 PDF。
此方法的缺点是,您将内容作为光栅图形抓取,从而删除任何矢量打印数据。 更糟糕的是,它是网络分辨率,通常是 96 dpi。
幸运的是,html2pdf 使用html2canvas
进行渲染,因此使用自定义{ scale: ...}
选项可以获得更好的分辨率:
var opt = {
...
html2canvas: { scale: 6 },
...
};
比例可以通过将目标 DPI 除以 96 来计算。 例如,大多数打印机都是600 dpi
,因此6
或7
的比例因子将相当不错。
最终应该考虑的另一个因素是图像压缩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 渲染,这将产生矢量图形(例如
FPDF
,mPDF
,DOMPDF
,wkhtmltopdf
,TCPDF
(
--或-- - 直接为 QZ 托盘使用准备 HTML