Изменить атрибут печати для имени носителя Java Apache FOP API - PullRequest
2 голосов
/ 13 июля 2011

Я использую API Apache FOP для печати документа, который некоторое время работал хорошо, но сейчас он пытается печатать на бумаге формата Legal в лотке 1. Мне интересно, могу ли я изменить это на Размер письма, чтобы пользователи не чтобы это произошло, нужно вручную нажать кнопку на принтере.

public void printDocument() {
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    PrintRequestAttributeSet aset =
            new HashPrintRequestAttributeSet();
    PrintService prnSvc = null;

    /* locate a print service that can handle it */
    PrintService[] pservices =
            PrintServiceLookup.lookupPrintServices(null, null);
    if (pservices.length > 0) {
        int ii = 0;
        while (ii < pservices.length) {
            System.out.println("Named Printer found: " + pservices[ii].getName());
            if (pservices[ii].getName().endsWith("xyz")) {
                prnSvc = pservices[ii];
                System.out.println("Named Printer selected: " + pservices[ii].getName() + "*");
                break;
            }
            ii++;
        }

        /* create a print job for the chosen service */
        DocPrintJob pj = prnSvc.createPrintJob();
        try {
            File file = new File("test.pcl");
            FileInputStream fis = new FileInputStream(file); //Doc encapsulating the print data
            Doc doc = new SimpleDoc(fis, flavor, null);
            /* print the doc as specified */
            pj.print(doc, aset);
        } catch (IOException ie) {
            System.err.println(ie);
        } catch (PrintException e) {
            e.printStackTrace();
            System.err.println(e);
        }
    }
}

Буду очень признателен, если кто-нибудь сможет дать какие-то рекомендации по этому поводу.

1 Ответ

2 голосов
/ 13 июля 2011

Вам необходимо указать размер бумаги, добавив его к aset:

aset.add(javax.print.attribute.standard.MediaSizeName.<desired paper size>);

(Javadoc для MediaSizeName).Для размера письма используйте

aset.add(javax.print.attribute.standard.MediaSizeName.NA_LETTER);
...