gpt4 book ai didi

java - 在热敏打印机 Java 上打印

转载 作者:行者123 更新时间:2023-11-29 09:00:08 25 4
gpt4 key购买 nike

我正在使用以下代码在带有 80 毫米卷纸的热敏打印机上打印一些文本:

public class printnow {

public static void printCard(final String bill) {
final PrinterJob job = PrinterJob.getPrinterJob();

Printable contentToPrint = new Printable() {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
Graphics2D g2d = (Graphics2D) graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
g2d.setFont(new Font("Monospaced", Font.BOLD, 7));
pageFormat.setOrientation(PageFormat.PORTRAIT);

Paper pPaper = pageFormat.getPaper();
pPaper.setImageableArea(0, 0, pPaper.getWidth() , pPaper.getHeight() -2);
pageFormat.setPaper(pPaper);

if (pageIndex > 0)
return NO_SUCH_PAGE; //Only one page

String Bill [] = bill.split(";");
int y = 0;
for (int i = 0; i < Bill.length; i++) {
g2d.drawString(Bill[i], 0, y);
y = y + 15;
}

return PAGE_EXISTS;
}
};

boolean don = job.printDialog();

job.setPrintable(contentToPrint);

try {
job.print();
} catch (PrinterException e) {
System.err.println(e.getMessage());
}
}
}

打印效果非常好,正是我想要的。但是,当我删除以下行以禁用打印对话框并自动执行打印过程时,我的打印变得困惑,打印机自动在左边留出一些边距。

boolean don = job.printDialog();

知道为什么会发生这种情况以及如何解决吗?

最佳答案

经过大量研究和动脑筋,我找到了解决方案。这是一个很小但很愚蠢的错误。阅读以下源代码:

public class printnow {

public static void printCard(final String bill ) {
final PrinterJob job = PrinterJob.getPrinterJob();

Printable contentToPrint = new Printable() {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
Graphics2D g2d = (Graphics2D) graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
g2d.setFont(new Font("Monospaced", Font.BOLD, 7));

if (pageIndex > 0) {
return NO_SUCH_PAGE;
} //Only one page

String Bill [] = bill.split(";");
int y = 0;
for (int i = 0; i < Bill.length; i++) {
g2d.drawString(Bill[i], 0, y);
y = y + 15;
}

return PAGE_EXISTS;
}
};

PageFormat pageFormat = new PageFormat();
pageFormat.setOrientation(PageFormat.PORTRAIT);

Paper pPaper = pageFormat.getPaper();
pPaper.setImageableArea(0, 0, pPaper.getWidth() , pPaper.getHeight() -2);
pageFormat.setPaper(pPaper);

job.setPrintable(contentToPrint, pageFormat);

try {
job.print();
} catch (PrinterException e) {
System.err.println(e.getMessage());
}
}
}

在前面的源代码(错误的)中,当应用程序触发打印对话框并且用户单击“确定”时,默认打印首选项将传输到 Java 应用程序并打印所需的内容。但是当我们通过删除这一行来禁用打印对话框时: boolean 值 don = job.printDialog();

不知从何而来的未知页面格式被传输。问题不在于我们定义的 PageFormat,问题在于 pageFormat 被传递给了我们最初没有做的打印方法:

job.setPrintable(contentToPrint, pageFormat);

注意传递给上述方法的第二个参数。希望这对大家有帮助。 :)

关于java - 在热敏打印机 Java 上打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17977510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com