java 条码图片放大后打印

 

package printtest;

import javax.imageio.ImageIO;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.PrintQuality;
import javax.swing.*;

import java.awt.*;

import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;

 

 

import com.mask.util.barcode.BarCode;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class SaiLunPrint extends JFrame {

 /**
  *
  */
 private static final long serialVersionUID = 1L;

 

 public SaiLunPrint() {

  MenuTest menuTest = new MenuTest();

  
  Container c = this.getContentPane();
  Button btn = new Button("点击这里,打印条码");
  btn.setSize(1, 1);
  btn.setBackground(Color.GREEN);
  btn.addActionListener(new ActionListener() {
    
    public void actionPerformed(ActionEvent e) {
     byte b[]=new byte[100000];
     RandomAccessFile raf1= null;
     try {
      raf1=new RandomAccessFile("D:\\dt900\\up\\DULP1.TXT","r");     
      raf1.read(b);
     } catch (FileNotFoundException e1) {
      JOptionPane.showMessageDialog(null, "文件不存在,请先用采集器扫描后再打印!", "打印失败",  JOptionPane.ERROR_MESSAGE);
     } catch (IOException e1) {
      JOptionPane.showMessageDialog(null, "读取文件错误,请重启程序!", "错误",  JOptionPane.ERROR_MESSAGE);
     }
     String s = new String(b);  
     
     String str[]=s.split("            ");
     List<String> list = new ArrayList<String>();


     for (int i = 0; i < str.length-1; i++) {
   //System.out.println(str[i]+"--"+i); 
      list.add(str[i]);
     }
//     for (int i = 0; i < list.size(); i++) {
//      System.out.println("list:"+list.get(i)+"--"+i); 
//        }
//     System.out.println("list:"+list.size()); 
     if(list.size()==0) System.exit(0);
     test(list);
     try {
      raf1.close();
     } catch (IOException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
     }
     
    }
    
   });
//  c.add(null, BorderLayout.WEST);

//  c.add(null, BorderLayout.EAST);
  c.add(btn, BorderLayout.CENTER);
//  c.add(null, BorderLayout.SOUTH);
  this.setJMenuBar(menuTest);

  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

  setSize(300, 220);

  setTitle("赛轮条码打印");

  //setUndecorated(true);

  setLocation(400, 350);

  show();

 }

 class MenuTest extends JMenuBar {

  /**
   *
   */
  private static final long serialVersionUID = 1L;
  private JDialog aboutDialog;

  public MenuTest() {

   JMenu fileMenu = new JMenu("文件");

   JMenuItem printMenuItem = new JMenuItem("打印条码", KeyEvent.VK_E);
   
   JMenuItem delFileMenuItem = new JMenuItem("删除条码文件", KeyEvent.VK_E);
   
   JMenuItem exitMenuItem = new JMenuItem("退出", KeyEvent.VK_E);

   JMenuItem aboutMenuItem = new JMenuItem("关于..", KeyEvent.VK_A);

   fileMenu.add(printMenuItem);
   fileMenu.add(delFileMenuItem);
   fileMenu.add(exitMenuItem);

   fileMenu.add(aboutMenuItem);

   this.add(fileMenu);

   aboutDialog = new JDialog();
   
   initAboutDialog();

   printMenuItem.addActionListener(new ActionListener() {
    
    public void actionPerformed(ActionEvent e) {
     byte b[]=new byte[100000];
     RandomAccessFile raf1= null;
     try {
      raf1=new RandomAccessFile("D:\\dt900\\up\\DULP1.TXT","r");     
      raf1.read(b);
     } catch (FileNotFoundException e1) {
      JOptionPane.showMessageDialog(null, "文件不存在,请先用采集器扫描后再打印!", "打印失败",  JOptionPane.ERROR_MESSAGE);
     } catch (IOException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
     }
     String s = new String(b);  
     
     String str[]=s.split("            ");
     List<String> list = new ArrayList<String>();


     for (int i = 0; i < str.length-1; i++) {
   //System.out.println(str[i]+"--"+i); 
      list.add(str[i]);
     }
//     for (int i = 0; i < list.size(); i++) {
//      System.out.println("list:"+list.get(i)+"--"+i); 
//        }
//     System.out.println("list:"+list.size()); 
     if(list.size()==0) System.exit(0);
     test(list);
     try {
      raf1.close();
     } catch (IOException e1) {
      JOptionPane.showMessageDialog(null, "文件关闭错误,请重启程序!", "错误",  JOptionPane.ERROR_MESSAGE);
     }
     
    }
    
   });
   delFileMenuItem.addActionListener(new ActionListener() {
    
    public void actionPerformed(ActionEvent e) {
     //Icon icon = new
     //JOptionPane.showConfirmDialog(null, "确认要删除采集器扫描的条码文件吗?", "文件删除确认", JOptionPane.YES_NO_OPTION);
     int delresult = JOptionPane.showConfirmDialog(null, "确认要删除采集器扫描的条码文件吗,删除后将不能打印扫描的条码?", "文件删除确认", JOptionPane.YES_NO_OPTION);
//System.out.println("delresult:"+delresult); 
     if(delresult==0)
     {
      //删除文件
      String filePath = "D:\\dt900\\up\\DULP1.TXT";
      File file = new File(filePath);
      
      if (!file.exists()) {
       JOptionPane.showMessageDialog(null, "文件不存在!", "删除失败",  JOptionPane.ERROR_MESSAGE);
       return;
       }
      else
      {
       boolean rs = file.delete();
       if (rs)
        JOptionPane.showMessageDialog(null, "文件删除成功!", "删除成功",  JOptionPane.ERROR_MESSAGE);
       else
        JOptionPane.showMessageDialog(null, "文件删除失败!", "删除失败",  JOptionPane.ERROR_MESSAGE);
      }
     }


    }
    
   });
   exitMenuItem.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

     dispose();

     System.exit(0);

    }

   });

   aboutMenuItem.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

     aboutDialog.show();

    }

   });

  }

  public JDialog get() {

   return aboutDialog;

  }

  public void initAboutDialog() {

   aboutDialog.setTitle("关于");

   Container con = aboutDialog.getContentPane();

   Icon icon = new ImageIcon("sdmile.gif");

   JLabel aboutLabel = new JLabel("" + "赛轮条码打印 V2.1" + "", icon,
     JLabel.CENTER);

   con.add(aboutLabel, BorderLayout.CENTER);
   aboutDialog.setSize(200, 100);
   aboutDialog.setLocation(450, 450);
   aboutDialog.addWindowListener(new WindowAdapter() {
    public void WindowClosing(WindowEvent e) {
     dispose();
    }
   });
  }
 }

 public  void test(List<String> listCode) {
  try {
   DocFlavor flavor = DocFlavor.INPUT_STREAM.JPEG;

   // get a printer
   PrintService[] printers = PrintServiceLookup.lookupPrintServices(
     flavor, null);
   //PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
   int k=0;
   for (int i = 0; i < printers.length; i++)
   {
    //System.out.println(printers[i].getName());
    if("EasyCoder PD42 (300 dpi) - DP".equals(printers[i].getName()))
     k=i;
   }
//   PrintService printer = ServiceUI.printDialog(null, 100, 100, printers, printers[k], flavor, attributes);
   PrintService printer = printers[k];

   

   // document
   ByteArrayOutputStream output = new ByteArrayOutputStream();
    /
    BufferedImage bufferedimage_temp = null;
          BufferedImage bufferedimage = null;
          AffineTransformOp  bio = new AffineTransformOp(new AffineTransform(),AffineTransformOp.TYPE_BICUBIC);
          BufferedImage bufferedimage3 = null;
          Graphics2D graphics2d3 = null;
         
          int codeIndex = 0;
          int codeLength = listCode.size();
          int oneWei = 1;
          if(codeLength>=8)
          {
           if(codeLength%8==0)
            oneWei = codeLength/8;
           else
            oneWei = codeLength/8+1;
          }
          BarCode barcode[][] = new BarCode[oneWei][8]; //注意一维需要动态指定
          for(int j=0;j<barcode.length;j++)
          {
   //System.out.println("外层循环值为:"+j);        
           for(int i=0;i<barcode[j].length;i++)
           {
  //System.out.println("外层循环值为:"+j+"内层循环值为:"+i);           
             barcode[j][i] = new BarCode();
            if(codeIndex<listCode.size())
            barcode[j][i].code = listCode.get(codeIndex++);
            else
            {
//System.out.println("list循环完毕,break 二层for循环!");     
             break;
            }
            barcode[j][i].barType = BarCode.CODE128;
            barcode[j][i].barHeightCM=0.8;
//        System.out.println("高度:"+barcode[j][i].getBarHeightCM());
//            Font font = new Font(null,Font.PLAIN,40);
//            barcode[j][i].setFont(font);
            barcode[j][i].setSize(barcode[j][i].width, barcode[j][i].height);
           // barcode[j][i].width=50;
            //则采用自动适应条码的尺寸
            bufferedimage_temp = new BufferedImage(barcode[j][i].getSize().width, barcode[j][i].getSize().height, BufferedImage.TYPE_BYTE_INDEXED);
            Graphics2D graphics2d_temp = bufferedimage_temp.createGraphics();
            barcode[j][i].paint(graphics2d_temp);
            barcode[j][i].invalidate();
            graphics2d_temp.dispose();
            //格式化图片格式为jpeg
            bufferedimage = new BufferedImage(barcode[j][i].getSize().width, barcode[j][i].getSize().height, BufferedImage.TYPE_INT_RGB);
            Graphics2D graphics2d = bufferedimage.createGraphics();
            barcode[j][i].paint(graphics2d);
           
            if(i==0)
            {
             bufferedimage3 = new BufferedImage(barcode[j][0].getSize().width,barcode[j][0].getSize().height*8, BufferedImage.TYPE_INT_RGB);
             graphics2d3 = bufferedimage3.createGraphics();
            }
            graphics2d3.drawImage(bufferedimage, bio, 0, barcode[j][i].getSize().height*i);
           
              // graphics2d3.drawImage(bufferedimage2, bio,0,barcode.getSize().height);
           }
           
           Image img=bufferedimage3.getScaledInstance(barcode[0][0].getSize().width*2, barcode[0][0].getSize().height*8, Image.SCALE_DEFAULT);
              BufferedImage tag = new BufferedImage(225, 460, BufferedImage.TYPE_INT_RGB);  //缩放图像  
              Graphics g = tag.getGraphics();  
              g.drawImage(img, 0, 0, null); // 绘制缩小后的图  
              g.dispose();  
            
            

            //合成图片              
               graphics2d3.dispose();
//System.out.println("合成图片宽度为:"+bufferedimage3.getWidth()+"合成图片高度为:"+bufferedimage3.getHeight());           
               JPEGImageEncoder jpegimageencoder = JPEGCodec.createJPEGEncoder(output);
               JPEGEncodeParam jpegencodeparam = jpegimageencoder.getDefaultJPEGEncodeParam(tag);
               jpegencodeparam.setQuality(1.0F, true);
               jpegimageencoder.setJPEGEncodeParam(jpegencodeparam);
               jpegimageencoder.encode(tag, jpegencodeparam);
               output.flush();
               //output.close();
          
           
        ImageIO.write(tag, "jpg", output);
     byte[] buf = output.toByteArray();
     InputStream stream = new ByteArrayInputStream(buf);
     Doc doc = new SimpleDoc(stream, flavor, null);
     //设置打印属性
     PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
     DocAttributeSet das = new HashDocAttributeSet();
     MediaPrintableArea mpa= new MediaPrintableArea(0.0f, 0.0f, 70.0f, 95.0f, MediaPrintableArea.MM);
     das.add(mpa);
     das.add(PrintQuality.HIGH);
//     das.add(Sides.ONE_SIDED);
     //das.add(OrientationRequested.LANDSCAPE);
     pras.addAll(das);
//     
     // print
     // job
     DocPrintJob job = printer.createPrintJob();
     job.print(doc, pras);
     output = new ByteArrayOutputStream();
          }
         // output.close();
//   
 
  } catch (Exception e) {
   JOptionPane.showMessageDialog(null, "打印错误,请连接打印机并重启程序后打印!", "打印错误",  JOptionPane.ERROR_MESSAGE);
  }
 }

 

 public static void main(String args[]) {
  new SaiLunPrint();
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值