If the image width exceeds 580 pixels the image gets cut off.
Hello,
When attempting to print images, images with a width exceeding 580 pixels are not printed in full when I tried it with my X-Printer Q371U. Instead, the portion of the image beyond 580 pixels in width is cut off, resulting in incomplete prints.
I am not sure if 580px is the same max width for all printers or just mine.
Is there any workaround or a way to solve this? This is the only package that prints images properly.
Thanks.
So, continuing with the topic from the other issue (https://github.com/Klemen1337/node-thermal-printer/issues/250), I couldn't make the print occupy the entire page. I just increased the size of the image to the maximum I needed.
In my case, I used the libraries pngjs and sharp to handle the image buffer resizing.
import { PNG } from 'pngjs'
import sharp from 'sharp'
async function resizePNGBuffer(buffer, newWidth) {
try {
const png = PNG.sync.read(buffer)
const scale = newWidth / png.width;
const newHeight = Math.round(png.height * scale);
const newBuffer = await sharp(buffer)
.resize({ width: newWidth, height: newHeight })
.toBuffer();
return newBuffer;
} catch (error) {
console.error('Error resizing image:', error);
return null;
}
}
// 510px was the maximum size I managed to resize the image without slowing down the printing.
async function getLayout() {
try {
const url = 'URL'
const payload = {}
const result = await axios.post(url, payload, { responseType: 'arraybuffer' })
const resizedBuffer = await resizePNGBuffer(result.data, 510)
await printFromBuffer(resizedBuffer)
} catch (e) {
console.log(e)
}
}
async function printFromBuffer(buffer) {
try {
let isConnected = await printer.isPrinterConnected()
if (!isConnected) {
throw Error("not connected")
}
await printer.printImageBuffer(buffer)
printer.cut()
await printer.execute()
printer.clear()
} catch (e) {
console.log(e)
}
}
I hope this can help you in some way, but the print still has margins on the paper's edge that I don't know how to solve yet.