打印质量/DPI
打印机的DPI设置与源图像DPI无关,俗称打印质量。
您需要打印尺寸
图像 DPI 取决于其分辨率(以像素为单位的宽度和高度)和以毫米或英寸为单位打印的尺寸,以提供打印分辨率(iDPU“每单位图像点数”,供本答案进一步参考)。
除非您还将固定的打印尺寸与图像相关联,否则图像 DPI 是没有意义的。
如果打印机的 DPI 设置与图像的 iDPI 不同,则打印机(或驱动程序)将对图像 DPI 进行下采样或上采样以匹配所需的 DPI。您要避免下采样,因为这会降低图像质量。
页面大小
让打印机 DPI 与图像 iDPU 匹配。此示例适用于纵向模式的 A4 页面。您可以使用任何尺寸的打印页面,但您需要知道实际的物理尺寸。
const pageSizes = {
a4 : {
portrait : {
inch : {
width : 8.27,
height : 11.69,
},
mm : {
width : 210,
height : 297,
}
},
landscape : {
inch : {
height : 8.27,
width : 11.69,
},
mm : {
width : 297,
height : 210,
}
},
}
画布分辨率
创建一个 iDPI 300 为 2 x 2 英寸的画布。
const DPI = 300; // need to have a selected dots per unit in this case inches
const units = "inch";
const pageLayout = "portrait";
const printOn = "a4";
// incase you are using mm you need to convert
const sizeWidth = 2; // canvas intended print size in units = "inch"
const sizeHeight = 2;
var canvas = document.createElement("canvas");
canvas.width = DPI * sizeWidth;
canvas.height = DPI * sizeHeight;
画布尺寸
缩放画布以适应页面大小,以匹配打印尺寸。这将是画布打印尺寸/页面打印宽度
canvas.style.width = ((sizeWidth / pageSizes[printOn][pageLayout][units].width) * 100) + "%";
对于高度,您需要假设像素方面是正方形,并且页面的高度可能比打印页面长或短,因此您必须使用像素。
canvas.style.height = Math.round((sizeHeight / pageSizes[printOn][pageLayout][units].width) * innerWidth) + "px";
将画布添加到页面
document.body.appendChild(canvas);
打印
- 确保打印机质量设置为 300DPI(或更高)。
- 选择页面尺寸(在本例中 A4 为 210 × 297 毫米或 8.27 × 11.69 英寸)
- 选择要纵向的布局。
- 在打印选项中选择无边框。
- 打印
带边框打印。
如果您想要打印页面上的边框,您需要使用自定义边框,以便您知道边框大小。 (注意示例仅使用英寸)
const border = { // in inches
top : 0.4,
bottom : 0.4,
left : 0.4,
right : 0.4,
}
如上所示创建画布。
画布大小
canvas.style.width = ((sizeWidth / (pageSizes.a4.portrait.width - border.left - border.right) * 100) + "%";
高度变得有点复杂,因为它需要为边框调整页面的像素宽度。
canvas.style.height = Math.round((sizeHeight / (pageSizes.a4.portrait.width - border.left - border.right)) * innerWidth * (1 - (border.left - border.right) / pageSizes.a4.portrait.width) ) + "px";