Java 如何在爱普生打印机上设置打印机可打印区域?

Java 如何在爱普生打印机上设置打印机可打印区域?,java,printing,epson,Java,Printing,Epson,我在设置我的爱普生打印机的页边距或可打印区域宽度方面有问题,我不确定。我什么都试过了,设置了司机,什么都试过了 我正在使用两台打印机EPSON TM-T20II收据和EPSON TM-H6000II收据,它们都有问题。测试页面打印正确,但我的数据不会在页面中传播 这是我正在使用的代码 public class Printing implements Printable { private String stringToPrint; public Printing(String

我在设置我的爱普生打印机的页边距或可打印区域宽度方面有问题,我不确定。我什么都试过了,设置了司机,什么都试过了

我正在使用两台打印机EPSON TM-T20II收据和EPSON TM-H6000II收据,它们都有问题。测试页面打印正确,但我的数据不会在页面中传播

这是我正在使用的代码

public class Printing implements Printable {
    private String stringToPrint;

    public Printing(String stringToPrint) {
        this.stringToPrint = stringToPrint;
    }
    @Override
    public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
        if (pageIndex >= 1) {
            return Printable.NO_SUCH_PAGE;
        }
        Paper paper = new Paper();
        double margin = 0;
        paper.setImageableArea(margin, margin, 612.0, 792.0);
        pf.setPaper(paper);
        g.setColor(Color.black);
        g.setFont(new Font(Font.MONOSPACED, Font.BOLD, 13));
        g.translate(0, 0);
        String printers = paper.getImageableHeight() + " " + paper.getImageableWidth() + "---" + pf.getHeight() + " "
            + pf.getWidth();
        Writer fw = null;
        try {
            fw = new OutputStreamWriter(new FileOutputStream("printingData.txt"), StandardCharsets.UTF_8);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        BufferedWriter bw = new BufferedWriter(fw);
        PrintWriter writer = new PrintWriter(bw);
        writer.print(printers);
        writer.close();
        int x = 0;
        int y = 100;
        for (String line : stringToPrint.split("\n")) {
            g.drawString(line, x, y += g.getFontMetrics().getHeight());
        }
        return Printable.PAGE_EXISTS;
    }
    public static void printer(String printerData, Boolean bill, String designatedPrinter)
        throws IOException, PrinterException {
        try {

            PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
            PrintService designatedService = null;
            PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
            AttributeSet aset = new HashAttributeSet();
            aset = new HashAttributeSet();
            aset.add(ColorSupported.NOT_SUPPORTED);
            String printers = "";
            for (int i = 0; i < printServices.length; i++) {
                printers += " service found " + printServices[i].getName() + "\n";
            }
            for (int i = 0; i < printServices.length; i++) {
                System.out.println(" service found " + printServices[i].getName());
                if (printServices[i].getName().equalsIgnoreCase(designatedPrinter)) {
                System.out.println("I want this one: " + printServices[i].getName());
                    designatedService = printServices[i];
                    break;
                }
            }
            Writer fw = new OutputStreamWriter(new FileOutputStream("printing.txt"), StandardCharsets.UTF_8);
            BufferedWriter bw = new BufferedWriter(fw);
            PrintWriter writer = new PrintWriter(bw);
            writer.print(printers);
            writer.close();
            PrinterJob pj = PrinterJob.getPrinterJob();
            pj.setPrintService(designatedService);
            Printable painter;

            // Specify the painter
            painter = new Printing(printerData);
            pj.setPrintable(painter);
            pj.print();

        } catch (PrinterException e) {
            Writer fw = new OutputStreamWriter(new FileOutputStream("log.txt", true), StandardCharsets.UTF_8);
            BufferedWriter bw = new BufferedWriter(fw);
            PrintWriter writer = new PrintWriter(bw);
            e.printStackTrace(writer);
            writer.close();
        }
    }
}
公共类打印实现可打印{
私有字符串stringToPrint;
公共打印(字符串stringToPrint){
this.stringToPrint=stringToPrint;
}
@凌驾
公共整型打印(图形g、页面格式pf、整型页面索引)引发PrinterException{
如果(页面索引>=1){
返回可打印的。无此页面;
}
纸张=新纸张();
双边距=0;
纸张.可设置成像面积(边距,边距,612.0,792.0);
设定纸(纸);
g、 设置颜色(颜色为黑色);
g、 setFont(新字体(Font.MONOSPACED,Font.BOLD,13));
g、 翻译(0,0);
字符串打印机=paper.getImageableHeight()+“”+paper.getImageableWidth()+“--”+pf.getHeight()+“”
+pf.getWidth();
Writer fw=null;
试一试{
fw=新的OutputStreamWriter(新文件OutputStream(“printingData.txt”)、StandardCharsets.UTF_8);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
BufferedWriter bw=新的BufferedWriter(fw);
PrintWriter=新的PrintWriter(bw);
书写、打印(打印机);
writer.close();
int x=0;
int y=100;
对于(字符串行:stringToPrint.split(“\n”)){
g、 抽绳(直线,x,y+=g.getFontMetrics().getHeight());
}
返回Printable.PAGE_存在;
}
公共静态无效打印机(字符串打印机数据、布尔票据、字符串指定打印机)
抛出IOException、PrinterException{
试一试{
PrintService PrintService=PrintServiceLookup.lookupDefaultPrintService();
PrintService指定的服务=null;
PrintService[]printServices=PrintServiceLookup.lookupPrintServices(null,null);
AttributeSet aset=新的HashAttributeSet();
aset=新的HashAttributeSet();
aset.add(支持颜色,不支持);
字符串打印机=”;
对于(int i=0;i

问题是您正在创建新页面,但没有将其添加到
PrinterJob

你添加了下面的评论

// Specify the painter
painter = new Printing(printerData);
pj.setPrintable(painter);
PageFormat pf0 = pj.defaultPage();
Paper p = pf0.getPaper();
p.setImageableArea(0, 0, pf0.getWidth(), pf0.getHeight());
pf0.setPaper(p);
pj.validatePage(pf0);
Book book = new Book();
book.append(painter, pj.validatePage(pf0));
pj.setPageable(book);
pj.print();

您在
打印功能中不需要它。

谢谢。这解决了我的问题。我暂停了,现在我可以完成了。