All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.daisy.braille.utils.pef.PrinterDevice Maven / Gradle / Ivy

There is a newer version: 1.0.7
Show newest version
/*
 * Braille Utils (C) 2010-2011 Daisy Consortium
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library; if not, write to the Free Software Foundation, Inc.,
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */
package org.daisy.braille.utils.pef;

import org.daisy.dotify.api.embosser.Device;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.DocAttributeSet;

/**
 * Printer device class of type DocFlavor.INPUT_STREAM.AUTOSENSE
 * 

* This class can be used when sending a file to a printer. * * @author Joel Håkansson * @version 3 jul 2008 */ public class PrinterDevice implements Device { //private static final DocFlavor FLAVOR = DocFlavor.BYTE_ARRAY.AUTOSENSE; private static final DocFlavor FLAVOR = DocFlavor.INPUT_STREAM.AUTOSENSE; private PrintService service; /** * Create a device with the provided name. * * @param deviceName the name of the device * @param fuzzyLookup If true, the returned device is any device whose name contains the * supplied deviceName. If false, the returned device name equals the supplied deviceName. * @throws IllegalArgumentException if no device is found. */ public PrinterDevice(String deviceName, boolean fuzzyLookup) { PrintService[] printers = PrintServiceLookup.lookupPrintServices(FLAVOR, null); for (PrintService p : printers) { if (p.getName().equals(deviceName)) { service = p; return; } } if (fuzzyLookup) { PrintService match = null; double currentMatch = 0; for (PrintService p : printers) { if (p.getName().contains(deviceName)) { double thisMatch = deviceName.length() / (double) p.getName().length(); if (thisMatch > currentMatch) { currentMatch = thisMatch; match = p; } } } if (match != null) { service = match; return; } } throw new IllegalArgumentException("Could not find embosser."); } /** * List available devices. * * @return returns a list of available devices that accepts DocFlavor.INPUT_STREAM.AUTOSENSE */ public static PrintService[] getDevices() { PrintService[] printers = PrintServiceLookup.lookupPrintServices(FLAVOR, null); return printers; } /** * Transmit a file to the device. * Transmit a file to the device. * * @param file the file to transmit * @throws PrintException if a print exception occurs */ @Override public void transmit(File file) throws PrintException { try { transmit(new FileInputStream(file)); } catch (FileNotFoundException e) { throw new PrintException(e); } } private void transmit(InputStream is) throws PrintException { InputStreamDoc doc = new InputStreamDoc(is); DocPrintJob dpj = service.createPrintJob(); dpj.print(doc, null); } private class InputStreamDoc implements Doc { private InputStream stream; /** * Creates a new input stream document. * * @param stream the input stream */ public InputStreamDoc(InputStream stream) { this.stream = stream; } @Override public DocAttributeSet getAttributes() { return null; } @Override public DocFlavor getDocFlavor() { return FLAVOR; } @Override public Object getPrintData() throws IOException { return getStreamForBytes(); } @Override public Reader getReaderForText() throws IOException { return null; } @Override public InputStream getStreamForBytes() throws IOException { return stream; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy