2011年2月21日月曜日

JavaPrintServiceで画像の印刷

Javaプログラムによる印刷を実現するためのJavaPrintService
を使ってみた。

最初は、簡単に画像ファイルを印刷するサンプルを実行してみた。

下記のサンプルでは、PrimoPDFを利用して印刷する例になっています。
結構簡単に印刷できました。

参考にしたページはこちら、

http://java.sun.com/j2se/1.4/ja/docs/ja/guide/jps/spec/JPSTOC.fm.html


import java.io.FileInputStream;
import java.io.FileNotFoundException;

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.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaSizeName;


public class PrintPNGFileTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  FileInputStream textstream= null;
  try{
   textstream = new FileInputStream("D:\\white.png");
  } catch (FileNotFoundException ffne) {
  }
  if (textstream == null) {
   return;
  }
  // ドキュメントの形式を設定。これはpngファイルの場合
  DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG;
  PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
        //用紙のサイズを指定。
  aset.add(MediaSizeName.ISO_A4);
  aset.add(new Copies(2));
  PrintService[] services =
   PrintServiceLookup.lookupPrintServices(
     flavor,
     aset);  
  System.out.println("プリンタ件数:"+services.length);
  for (int i=0;i<services.length;i++){
   System.out.println(services[i].getName());
  }
  int primoIdx=-1;
  for (int i=0;i<services.length;i++){
   if ("PrimoPDF".equals(services[i].getName())){
    primoIdx=i;
   }
  }
  if (services.length > 0) {
   Doc myDoc = new SimpleDoc(textstream, flavor, null);
   DocPrintJob job = services[primoIdx].createPrintJob();
   try {
    job.print(myDoc, aset);
   } catch (PrintException pe) {
    pe.printStackTrace();
   }
  }
 }

}

0 件のコメント: