Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

If the image width exceeds 580 pixels the image gets cut off. #249

Open
adnanlah opened this issue Apr 3, 2024 · 1 comment
Open

If the image width exceeds 580 pixels the image gets cut off. #249

adnanlah opened this issue Apr 3, 2024 · 1 comment

Comments

@adnanlah
Copy link

adnanlah commented Apr 3, 2024

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.

@hugocalheira
Copy link

So, continuing with the topic from the other issue (#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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants