2

それで、父が領収書などを印刷するためのJavaプログラムを書いています。私の当初の意図は、彼が行った各取引に関する情報を彼のレシート プリンターに出力することでした。ただし、プリンターは、送信したものを極端に切り取らずに印刷するのに問題があります。

私の次のアイデアは、非常にうまくいきましたが、「領収書」を XPS ファイルに保存し、XPS を印刷することでした。これで、Microsoft の XPS Document Writer PrintService を使用して XPS ファイルに印刷できます。問題は、私がそれを行うと、ファイル名と保存先を尋ねるボックスが常にポップアップすることです。

そのポップアップをまったく表示しないように設定する方法はありますか?

現在のコード:

PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
try {
    job.print();
} catch (PrinterException ex) {
    // The job did not successfully complete 
}

-

@Override
public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
     String temp;

    if (page > 0) { /* We have only one page, and 'page' is zero-based */
        return NO_SUCH_PAGE;
    }

    Graphics2D g2d = (Graphics2D)g;
    g2d.translate(pf.getImageableX(), pf.getImageableY());
    int lineSize=20;

    Font testFont=new Font("Lucida Console", 0, 20);
    g.setFont(testFont);

    g.drawString("      Fatura/Recibo nº"+nmrRec+"      ", 5, 20);
    return PAGE_EXISTS;
}
4

2 に答える 2

2

Destination属性を設定することで、それを実行できるはずです。

static void print(Printable printable, PrintService service)
throws PrintException,
       IOException {

    Path outputFile = Files.createTempFile(
        Paths.get(System.getProperty("user.home")), null, ".xps");

    Doc doc = new SimpleDoc(printable,
        DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);

    PrintRequestAttributeSet attributes =
        new HashPrintRequestAttributeSet();
    attributes.add(new Destination(outputFile.toUri()));

    DocPrintJob job = service.createPrintJob();
    job.print(doc, attributes);
}
于 2013-02-08T03:43:51.643 に答える
1

だから私はVGRのアドバイスに従い、それを機能させました。誰かが同じ問題に遭遇した場合に備えて、これが私の最後のコードでした。

Date data = new Date();                                         //Data
DateFormat dataform = new SimpleDateFormat("dd-MM-yyyy");       //Data

PrintService service=getPrinterService("Microsoft XPS Document Writer");
if(service!=null){
    try{
        File outputFile = new File(dataform.format(data)+"-Recibo"+nmrRec+".xps");

        Doc doc = new SimpleDoc(new myReceipt(), DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);

        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(new Destination(outputFile.toURI()));

        DocPrintJob job = service.createPrintJob();
        job.print(doc, attributes);
    } catch(Exception e){
        System.out.println("kaboom"+e);
    }
}
else{
    System.out.println("XPS Printer not found");
}

そして、私のレシートクラスがあります:

class myReceipt implements Printable{

    @Override
    public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
        String temp;

        if (page > 0) { /* We have only one page, and 'page' is zero-based */
            return NO_SUCH_PAGE;
        }

        /* User (0,0) is typically outside the imageable area, so we must
         * translate by the X and Y values in the PageFormat to avoid clipping
         */
        Graphics2D g2d = (Graphics2D)g;
        g2d.translate(pf.getImageableX(), pf.getImageableY());
        int lineSize=20;

        Font testFont=new Font("Lucida Console", Font.BOLD, 20);
        // font name, style (0 for Plain), font size
        g.setFont(testFont);
        int line=20;

        g.drawString("        Fatura/Recibo nº"+nmrRec+"      ", 5, line);
        return PAGE_EXISTS;
    }
}
于 2013-02-09T16:55:02.897 に答える