Как распечатать PDF в определенный лоток без взаимодействия с пользователем в Java - PullRequest
7 голосов
/ 25 февраля 2011

Я пытаюсь настроить службу, которая работает ночью, чтобы автоматически распечатывать несколько счетов и другие документы на нескольких принтерах. На данный момент я могу печатать документы нормально, но мне нужно иметь возможность указать лоток (один с фирменным бланком нашей компании и один со стандартной белой бумагой). Все, что я пробовал до сих пор, вообще не работает атрибут MediaTray в наборе PrintRequestAttribute, но это, похоже, ничего не делает. У кого-нибудь был опыт с чем-то вроде этого?

Мой текущий код, который я использую для тестирования, выглядит следующим образом.

// Create a PDFFile from a File reference
File f = new File("C:\\File.pdf");
FileInputStream fis = new FileInputStream(f);
FileChannel fc = fis.getChannel();
ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
PDFFile pdfFile = new PDFFile(bb); // Create PDF Print Page
PDFPrintPage pages = new PDFPrintPage(pdfFile);

// Create Print Job
PrinterJob pjob = PrinterJob.getPrinterJob();
PageFormat pf = PrinterJob.getPrinterJob().defaultPage();
pjob.setJobName(f.getName());
Book book = new Book();
book.append(pages, pf, pdfFile.getNumPages());
pjob.setPageable(book);
// Send print job to default printer


PrintRequestAttributeSet aset=new HashPrintRequestAttributeSet();
aset.add(MediaTray.MIDDLE); //Used several of the tray options here
pjob.print(aset);

Ответы [ 2 ]

2 голосов
/ 15 января 2013

Я использую отчет о яшме.Вот код.

public void runReport()
{
    JasperReport jasperReport;
    JasperPrint jasperPrint;
    try
    {
        jasperReport = JasperCompileManager.compileReport("C:/temp/jtest.jrxml");     
        jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), new JREmptyDataSource());      

        PrinterJob job = PrinterJob.getPrinterJob(); 
        /* Create an array of PrintServices */ 
        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null); 

        PageFormat pf = PrinterJob.getPrinterJob().defaultPage();
        job.defaultPage(pf);
        int selectedService = 0; 


        String theUserPrinterName = "\\\\office1\\printer1";
        AttributeSet attrSet = new HashPrintServiceAttributeSet(new PrinterName(theUserPrinterName, null)); 
        services = PrintServiceLookup.lookupPrintServices(null, attrSet); 
        try {
            job.setPrintService(services[selectedService]); 
        } catch (Exception e)
        {
            e.printStackTrace();
        }
        PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet(); 
        printRequestAttributeSet.add(MediaSizeName.NA_LETTER); 
        printRequestAttributeSet.add(new Copies(1)); 

        exporter = new JRPrintServiceExporter(); 
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        /* We set the selected service and pass it as a paramenter */ 
        exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE, services[selectedService]); 
        exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, services[selectedService].getAttributes()); 
        exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, printRequestAttributeSet); 
        exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE); 
        exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.FALSE); 
        exporter.exportReport(); 
    }
    catch (JRException e)
    {
        System.out.println("Caught exception!!!");
        e.printStackTrace();
        exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.TRUE); 
        try {   
            exporter.exportReport();
        }
        catch (JRException e2)
        {
            e2.printStackTrace();
        }
    }
0 голосов
/ 27 февраля 2011

что вы на самом деле используете для печати PDF? Отправка PDF непосредственно на принтер работает, только если принтер напрямую поддерживает PDF. В противном случае вам нужно растеризовать библиотеку Java. В блоге есть статья о способах печати PDF из JAva на http://www.jpedal.org/PDFblog/2010/01/printing-pdf-files-from-java/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...