0

バーコード 4j によって生成されたバーコードを Dymo プリンターで印刷しようとしています。私のバーコードジェネレーターは、入力ストリームに変換して印刷メソッドに渡すバイト配列としてバーコードを提供します。しかし、どういうわけか、プリンターはそれを正しく印刷できません。期待どおりに印刷するには、PrintRequestAttributeSet を適切に設定する必要があるようです。ラベル プリンターでバーコードを印刷するための正しい印刷属性は何ですか。これが私のコードです。プログラム内でこの PrintRequestAttributeSet を自動検出する方法はありますか。

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.*;
import java.io.*;
import java.util.HashMap;
import java.util.Map;

import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;

public class HelloWorldPrinter implements Printable, ActionListener {




    public static void main(String args[]) throws PrintException, FileNotFoundException {


        HelloWorldPrinter hwp = new HelloWorldPrinter();
        hwp.printMe();

    }


    public void printMe() throws PrintException, FileNotFoundException{
        Map<String, String> params = new HashMap<String, String>();
        params.put("type", "Interleaved2of5");
        params.put("msg", "0002221845");
        NBPTSBarcodeGenerator nbg = new NBPTSBarcodeGenerator();

        InputStream in = new ByteArrayInputStream(nbg.generateBarcode(params).toString().getBytes());

        // find the printing service
        AttributeSet attributeSet = new HashAttributeSet();
        attributeSet.add(new PrinterName("DYMO LabelWriter 450 Turbo", null));
        attributeSet.add(new Copies(1));

        PrintService[] pservices = PrintServiceLookup.lookupPrintServices(
                null, attributeSet);


        PrintService pservice = pservices[0];
        DocFlavor[] flavors = pservice.getSupportedDocFlavors();
        for (int i = 0; i < flavors.length; i++)
        {
            System.out.println("\t" + flavors);
        }
        //create document
        Doc doc = new SimpleDoc(in, DocFlavor.INPUT_STREAM.PDF, null);

        DocPrintJob job = pservice.createPrintJob();

        // monitor print job events
        PrintJobWatcher watcher = new PrintJobWatcher(job);
        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();

        aset.add(OrientationRequested.PORTRAIT);
        aset.add(MediaSizeName.ISO_A6);
        System.out.println("Printing...");
        job.print(doc, aset);

        // wait for the job to be done
        watcher.waitForDone();
        System.out.println("Job Completed!!");
    }

    private static void printService(PrintService[] services) {
        if (services!=null && services.length>0) {
            for (int i = 0; i < services.length; i++) {
                System.out.println("t" + services[i]);
            }
        }
    }

    class PrintJobWatcher {
          boolean done = false;

          PrintJobWatcher(DocPrintJob job) {
            job.addPrintJobListener(new PrintJobAdapter() {
              public void printJobCanceled(PrintJobEvent pje) {
                allDone();
              }
              public void printJobCompleted(PrintJobEvent pje) {
                allDone();
              }
              public void printJobFailed(PrintJobEvent pje) {
                allDone();
              }
              public void printJobNoMoreEvents(PrintJobEvent pje) {
                allDone();
              }
              void allDone() {
                synchronized (PrintJobWatcher.this) {
                  done = true;
                  System.out.println("Printing done ...");
                  PrintJobWatcher.this.notify();
                }
              }
            });
          }
          public synchronized void waitForDone() {
            try {
              while (!done) {
                wait();
              }
            } catch (InterruptedException e) {
            }
          }
    }
}
4

0 に答える 0