3

これを使用してhtlmファイルを直接プリンターに送信していますが、プリンターがフォーマットをサポートしていないことを意味する無効なフレーバーと表示されています。誰でもこれを行うアイデアを持っています..

/**
 * @param args
 */
public static void main(String[] args) {
    // Input the file
    FileInputStream textStream = null; 
    try { 
        textStream = new FileInputStream("./some.html"); 
    } catch (FileNotFoundException ffne) { 
    } 
    if (textStream == null) { 
        return; 
    } 
    // Set the document type
    DocFlavor myFormat  = DocFlavor.INPUT_STREAM.TEXT_HTML_HOST;

    // Create a Doc
    Doc myDoc = new SimpleDoc(textStream, myFormat , null);         
    // Build a set of attributes
    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
    aset.add(new Copies(1)); 
    //aset.add(MediaSize.NA.LEGAL);
    aset.add(Sides.ONE_SIDED); 
    // discover the printers that can print the format according to the
    // instructions in the attribute set
    PrintService services = PrintServiceLookup.lookupDefaultPrintService();
        //PrintServiceLookup.lookupPrintServices(myFormat, aset);
    // Create a print job from one of the print services
    //System.out.println("====5======="+service.get);
    //if (services.length > 0) { 
    for (int i = 0; i < services.getSupportedDocFlavors().length; i++) {
        System.out.println("====getSupportedDocFlavors======="+services.getSupportedDocFlavors()[i]);
    }

        DocPrintJob job = services.createPrintJob(); 
        try { 
            job.print(myDoc, aset); 
        } catch (PrintException pe) {
            System.out.println("====PrintException======="+pe);
        } 
    //} 

}

それは言う

sun.print.PrintJobFlavorException: invalid flavor
4

2 に答える 2

2

プリンタにHTMLドキュメントを紙に処理(レンダリング)させようとしています。それは決してそのようには機能しません。そしてもちろん、あなたが送っているフレーバーはサポートされていません。

まず、HTMLをグラフィック表現にレンダリングしてから、プリンターに送信する必要があります。最新のHTMLページをレンダリングできるJava用の優れたクロスプラットフォームツールはありません。しかし、JavaFXには1つあり、それを使用してタスクを処理できると思います。

最終的な画像の印刷については、http:
//www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-Printing.htmlを参照するか、 http://www
のコードを参照してください。
java2s.com/Code/Java/2D-Graphics-GUI/PrintanImagetoprintdirectly.htm
または他のリソースを見つける-印刷についてはたくさんあります。

于 2012-08-24T15:01:34.397 に答える
0

パブリッククラスPOSPrinter{

private static final Log LOG = LogFactory.getLog(POSPrinter.class);

public POSPrinter(Long billID, String printMode) {
}

/**
 * 
 * This method prints the specified PDF to specified printer under specified
 * 
 * job name
 * 
 * 
 * 
 * @param filePath
 *            Path of PDF file
 * 
 * @param printerName
 *            Printer name
 * 
 * @param jobName
 *            Print job name
 * 
 * @throws IOException
 * 
 * @throws PrinterException
 */

public void printPDF(String filePath, String printerName, String jobName,
        Integer height, Integer width) throws IOException, PrinterException {

    FileInputStream fileInputStream = new FileInputStream(filePath);

    byte[] pdfContent = new byte[fileInputStream.available()];

    fileInputStream.read(pdfContent, 0, fileInputStream.available());

    ByteBuffer buffer = ByteBuffer.wrap(pdfContent);

    final PDFFile pdfFile = new PDFFile(buffer);

    Printable printable = new Printable() {

        public int print(Graphics graphics, PageFormat pageFormat,
                int pageIndex) throws PrinterException {

            int pagenum = pageIndex + 1;

            if ((pagenum >= 1) && (pagenum <= pdfFile.getNumPages())) {

                Graphics2D graphics2D = (Graphics2D) graphics;

                PDFPage page = pdfFile.getPage(pagenum);

                Rectangle imageArea = new Rectangle(

                (int) pageFormat.getImageableX(),

                (int) pageFormat.getImageableY(),

                (int) pageFormat.getImageableWidth(),

                (int) pageFormat.getImageableHeight());

                graphics2D.translate(0, 0);

                PDFRenderer pdfRenderer = new PDFRenderer(page, graphics2D,
                        imageArea, null, null);

                try {
                    page.waitForFinish();

                    pdfRenderer.run();

                } catch (InterruptedException exception) {
                    exception.printStackTrace();
                }

                return PAGE_EXISTS;

            } else {

                return NO_SUCH_PAGE;

            }

        }

    };

    PrinterJob printJob = PrinterJob.getPrinterJob();

    PageFormat pageFormat = PrinterJob.getPrinterJob().defaultPage();

    printJob.setJobName(jobName);

    Book book = new Book();

    book.append(printable, pageFormat, pdfFile.getNumPages());

    printJob.setPageable(book);

    Paper paper = new Paper();

    paper.setSize(width, height);
    paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight());

    // pageFormat
    pageFormat.setPaper(paper);

    // PrintService[] printServices = PrinterJob.lookupPrintServices();
    //
    // for (int count = 0; count < printServices.length; ++count) {
    //
    // if (printerName.equalsIgnoreCase(printServices[count].getName())) {
    //
    // printJob.setPrintService(printServices[count]);
    //
    // break;
    //
    // }
    //
    // }

    PrintService printService = PrintServiceLookup
            .lookupDefaultPrintService();
    printJob.setPrintService(printService);

    printJob.print();

}
于 2012-09-10T11:19:55.990 に答える