Java 调整要在热敏打印机上打印的图像的大小

Java 调整要在热敏打印机上打印的图像的大小,java,image,resize,image-resizing,thermal-printer,Java,Image,Resize,Image Resizing,Thermal Printer,我想在热敏打印机上打印图像,但当我使用此代码时,图像会变小。如何更改要打印的图像的大小 public void printPhoto() throws Exception { PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); pras.add(new Copies(1)); pras.size(); PrintService pss[] = PrintServiceLookup.lookupPrintSe

我想在热敏打印机上打印图像,但当我使用此代码时,图像会变小。如何更改要打印的图像的大小

public  void printPhoto() throws Exception  {

PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(new Copies(1));
pras.size();
PrintService pss[] = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.PNG, pras);

if (pss.length == 0)
  throw new RuntimeException("No printer services available.");
PrintService ps = findPrintService("POS-58", pss);
System.out.println("Printing to " + ps);
DocPrintJob job = ps.createPrintJob();

FileInputStream fin = new FileInputStream("D:\\QRCODE\\test.png");
Doc doc = new SimpleDoc(fin, DocFlavor.INPUT_STREAM.PNG, null);

job.print(doc, pras);
fin.close();
}

有人能帮我吗?这是我们学校的项目。非常感谢。

我将代码更改为

private static BufferedImage image;

public void  PrintLogo(){
    try {
        image = ImageIO.read(new File("C:\\Users\\ADMIN\\Desktop\\logothermal.png"));

        System.out.println(image.getWidth() + "x" + image.getHeight());

        PrinterJob pj = PrinterJob.getPrinterJob();
            PageFormat pf = pj.defaultPage();
            Paper paper = pf.getPaper();
 //                        86X54mm
            double width = fromCMToPPI(7.6);
            double height = fromCMToPPI(3.4);
            paper.setSize(width, height);
            paper.setImageableArea(
                            fromCMToPPI(0.1),
                            fromCMToPPI(0.1),
                            width - fromCMToPPI(0.1),
                            height - fromCMToPPI(0.1));
            pf.setOrientation(PageFormat.PORTRAIT);
            pf.setPaper(paper);
            PageFormat validatePage = pj.validatePage(pf);
            System.out.println("Valid- " + dump(validatePage));
            pj.setPrintable(new MyPrintable(), validatePage);
            try {
                pj.print();
            } catch (PrinterException ex) {
                ex.printStackTrace();
            }
        
    } catch (IOException exp) {
        exp.printStackTrace();
    }
}

public static double fromPPItoCM(double dpi) {
    return dpi / 72 / 0.393700787;
}

public static double fromCMToPPI(double cm) {
    return toPPI(cm * 0.393700787);
}

public static double toPPI(double inch) {
    return inch * 72d;
}

public static String dump(Paper paper) {
    StringBuilder sb = new StringBuilder(64);
    sb.append(paper.getWidth()).append("x").append(paper.getHeight())
                    .append("/").append(paper.getImageableX()).append("x").
                    append(paper.getImageableY()).append(" - ").append(paper
                    
.getImageableWidth()).append("x").append(paper.getImageableHeight());
    return sb.toString();
}

public static String dump(PageFormat pf) {
    Paper paper = pf.getPaper();
    return dump(paper);
}

public static class MyPrintable implements Printable {

    @Override
    public int print(Graphics graphics, PageFormat pageFormat,
                                     int pageIndex) throws PrinterException {
        System.out.println(pageIndex);
        int result = NO_SUCH_PAGE;
        if (pageIndex < 1) {
            Graphics2D g2d = (Graphics2D) graphics;
            System.out.println("[Print] " + dump(pageFormat));
            double width = pageFormat.getImageableWidth();
            double height = pageFormat.getImageableHeight()/2;

            System.out.println("Print Size = " + fromPPItoCM(width) + "x" + 
        fromPPItoCM(height));
            g2d.translate((int) pageFormat.getImageableX(),
                            (int) pageFormat.getImageableY());
            Image scaled = null;
            if (width > height) {
                scaled = image.getScaledInstance((int)Math.round(width), -1, 
Image.SCALE_SMOOTH);
            } else {
                scaled = image.getScaledInstance(-1, (int)Math.round(height), 
Image.SCALE_SMOOTH);
            }
            g2d.drawImage(scaled, 0, 0, null);
            result = PAGE_EXISTS;
        }
        return result;
    }

}
私有静态缓冲区映像;
公共标识(){
试一试{
image=ImageIO.read(新文件(“C:\\Users\\ADMIN\\Desktop\\logothermal.png”);
System.out.println(image.getWidth()+“x”+image.getHeight());
PrinterJob pj=PrinterJob.getPrinterJob();
PageFormat pf=pj.defaultPage();
纸张=pf.getPaper();
//86X54mm
双倍宽度=从cmtoppi(7.6);
双倍高度=从cmtoppi(3.4);
纸张尺寸(宽度、高度);
纸张设置可成像区域(
从cmtoppi(0.1),
从cmtoppi(0.1),
宽度-从cmtoppi(0.1),
高度-从cmtoppi(0.1));
设置方向(页面格式.纵向);
设定纸(纸);
PageFormat validatePage=pj.validatePage(pf);
System.out.println(“有效-”+转储(validatePage));
pj.setPrintable(新的MyPrintable(),validatePage);
试一试{
pj.print();
}捕获(打印例外){
例如printStackTrace();
}
}捕获(IOEXP异常){
exp.printStackTrace();
}
}
公共静态双从PPITOCM(双dpi){
返回dpi/72/0.393700787;
}
公共静态双从CMTOPPI(双厘米){
返回toPPI(厘米*0.393700787);
}
公共静电双针头(双英寸){
返回英寸*72d;
}
公共静态字符串转储(纸张){
StringBuilder sb=新的StringBuilder(64);
sb.append(paper.getWidth()).append(“x”).append(paper.getHeight())
.append(“/”).append(paper.getImageableX()).append(“x”)。
追加(paper.getImageTabley()).append(“-”).append(paper
.getImageableWidth()).append(“x”).append(paper.getImageableHeight());
使某人返回字符串();
}
公共静态字符串转储(PageFormat pf){
纸张=pf.getPaper();
返回转储(纸张);
}
公共静态类MyPrintable实现了可打印{
@凌驾
公共整数打印(图形、页面格式、页面格式、,
int pageIndex)引发PrinterException{
System.out.println(页面索引);
int result=无此类页面;
如果(页面索引<1){
Graphics2D g2d=(Graphics2D)图形;
System.out.println(“[Print]”加dump(pageFormat));
double width=pageFormat.getImageableWidth();
double height=pageFormat.getImageableHeight()/2;
System.out.println(“打印大小=“+fromPPItoCM(宽度)+“x”+
fromPPItoCM(高度));
g2d.translate((int)pageFormat.GetImageTablex(),
(int)pageFormat.getImageTabley());
图像缩放=空;
如果(宽度>高度){
scaled=image.getScaledInstance((int)Math.round(width),-1,
图像。缩放(平滑);
}否则{
scaled=image.getScaledInstance(-1,(int)Math.round(height),
图像。缩放(平滑);
}
g2d.drawImage(缩放,0,0,空);
结果=页面_存在;
}
返回结果;
}
}

是否取决于打印机的供应商型号模式?如果你加上它们,你会更容易得到建议和答案。如果你能解释一下你是如何回答问题的,那就太好了。然后你可以接受它作为一个答案。