精华内容
下载资源
问答
  • 程序功能:创建打印机类Printer,定义抽象方法Print()。 创建针式打印机类DotMatrixtPrinter和墨式打印机InkpetPrinter两个子类,并在各自类中重新print方法,编写测试类实现打印机进行打印。再增加一个激光打印机...

    程序功能:创建打印机类Printer,定义抽象方法Print()。 创建针式打印机类DotMatrixtPrinter和墨式打印机InkpetPrinter两个子类,并在各自类中重新print方法,编写测试类实现打印机进行打印。再增加一个激光打印机子类LaserPrinter,重新print()方法,修改测试类,实现该打印机打印。

    Printer抽象打印机类,代码如下:

    /**
     *   Author:Xu Zheng Wei
     *   E-mail:2518298846@qq.com
     *   程序功能:总目标是:创建打印机类Printer,定义抽象方法Print()。
     *   创建针式打印机类DotMatrixtPrinter和墨式打印机InkpetPrinter两个子类,
     *   并在各自类中重新print方法,编写测试类实现打印机进行打印。
     *   再增加一个激光打印机子类LaserPrinter,重新print()方法,
     *   修改测试类,实现该打印机打印。
     *
     *   现在代码是创建抽象打印机类。
     */
    
    package dibazhang.three;
    
    public abstract class Printer {      //抽象打印机类。
    
        public abstract void print();    //抽象方法,实现打印。
    }
    
    
    

    DotMatrixPrinter针式打印机类,代码如下:

    /**
     *   Author:Xu Zheng Wei
     *   E-mail:2518298846@qq.com
     *   程序功能:总目标是:创建打印机类Printer,定义抽象方法Print()。
     *   创建针式打印机类DotMatrixtPrinter和墨式打印机InkpetPrinter两个子类,
     *   并在各自类中重新print方法,编写测试类实现打印机进行打印。
     *   再增加一个激光打印机子类LaserPrinter,重新print()方法,
     *   修改测试类,实现该打印机打印。
     *
     *   现在代码是创建针式打印机类。
     */
    
    package dibazhang.three;
    
    public class DotMatrixPrinter extends Printer {     //针式打印机类。
    
        public void print() {                           //打印。
            System.out.println("打印速度慢,效果差,噪音高");
        }
    }
    
    
    

    InkpetPrinter喷墨打印机类,代码如下:

    /**
     *   Author:Xu Zheng Wei
     *   E-mail:2518298846@qq.com
     *   程序功能:总目标是:创建打印机类Printer,定义抽象方法Print()。
     *   创建针式打印机类DotMatrixtPrinter和墨式打印机InkpetPrinter两个子类,
     *   并在各自类中重新print方法,编写测试类实现打印机进行打印。
     *   再增加一个激光打印机子类LaserPrinter,重新print()方法,
     *   修改测试类,实现该打印机打印。
     *
     *   现在代码是创建喷墨打印机类。
     */
    
    package dibazhang.three;
    
    public class InkpetPrinter extends Printer {    //喷墨打印机类。
    
        public void print() {                      //打印。
            System.out.println("打印效果介于针式和激光打印机之间");
        }
    }
    
    
    

    LaserPrinter激光打印机类,代码如下:

    /**
     *   Author:Xu Zheng Wei
     *   E-mail:2518298846@qq.com
     *   程序功能:总目标是:创建打印机类Printer,定义抽象方法Print()。
     *   创建针式打印机类DotMatrixtPrinter和墨式打印机InkpetPrinter两个子类,
     *   并在各自类中重新print方法,编写测试类实现打印机进行打印。
     *   再增加一个激光打印机子类LaserPrinter,重新print()方法,
     *   修改测试类,实现该打印机打印。
     *
     *   现在代码是创建激光打印机类。
     */
    
    package dibazhang.three;
    
    public class LaserPrinter extends Printer {    //激光打印机类。
    
        public void print() {                     //打印。
            System.out.println("打印速度快,噪音小,效果好");
        }
    }
    
    
    

    TestPrinter测试类,实现各种打印机打印,代码如下:

    /**
     *   Author:Xu Zheng Wei
     *   E-mail:2518298846@qq.com
     *   程序功能:总目标是:创建打印机类Printer,定义抽象方法Print()。
     *   创建针式打印机类DotMatrixtPrinter和墨式打印机InkpetPrinter两个子类,
     *   并在各自类中重新print方法,编写测试类实现打印机进行打印。
     *   再增加一个激光打印机子类LaserPrinter,重新print()方法,
     *   修改测试类,实现该打印机打印。
     *
     *   现在代码是创建测试类,实现各种打印机打印。
     */
    
    package dibazhang.three;
    
    public class TestPrinter {                         //测试类,实现各种打印机打印。
        public static void main(String[] args) {
    
            Printer dprinter=new DotMatrixPrinter();   //创建针式打印机对象并打印
            dprinter.print();
    
            Printer iprinter=new InkpetPrinter();      //创建喷墨打印机对象并打印
            iprinter.print();
    
    		Printer lprinter=new LaserPrinter();       //创建激光打印机对象并打印
    		lprinter.print();
        }
    }
    
    
    

    运行结果如下:
    在这里插入图片描述

    展开全文
  • java调用打印机

    千次阅读 2017-11-17 16:07:38
    调用打印机打印pdf等文件,支持打印份数,双面打印 package com.gehouse.smartdevice.config; import java.util.Map; import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Maps; /*...

    调用打印机打印pdf等文件,支持打印份数,双面打印

    package com.gehouse.smartdevice.config;
    
    import java.util.Map;
    import org.apache.commons.lang3.StringUtils;
    import com.google.common.collect.Maps;
    
    /**
     * 全局配置类
     * 
     */
    public class Global {
    
    	/**
    	 * 当前对象实例
    	 */
    	private static Global global = new Global();
    
    	/**
    	 * 保存全局属性值
    	 */
    	private static Map<String, String> map = Maps.newHashMap();
    
    	/**
    	 * 属性文件加载对象
    	 */
    	private static PropertiesLoader loader = new PropertiesLoader("system.properties");
    
    	/**
    	 * 对/错
    	 */
    	public static final String TRUE = "true";
    	public static final String FALSE = "false";
    
    	/**
    	 * 获取当前对象实例
    	 */
    	public static Global getInstance() {
    		return global;
    	}
    
    	/**
    	 * 获取配置
    	 * 
    	 * @see ${fns:getConfig('adminPath')}
    	 */
    	public static String getConfig(String key) {
    		String value = map.get(key);
    		if (value == null) {
    			value = loader.getProperty(key);
    			map.put(key, value != null ? value : StringUtils.EMPTY);
    		}
    		return value;
    	}
    
    	/**
    	 * 页面获取常量
    	 * 
    	 * @see ${fns:getConst('YES')}
    	 */
    	public static Object getConst(String field) {
    		try {
    			return Global.class.getField(field).get(null);
    		} catch (Exception e) {
    			// 异常代表无配置,这里什么也不做
    		}
    		return null;
    	}
    
    	/**
    	 * 获取A4纸打印机
    	 */
    	public static String getPrinterA4() {
    		return getConfig("printer.A4");
    	}
    }
    

    配置文件 system.properties

    设置默认打印机名称

    #A4\u6253\u5370\u673a
    printer.A4=NPI82AACC (HP LaserJet M1536dnf MFP)
    

    打印文件 

    package com.gehouse.smartdevice.tools;
    
    import java.awt.print.PrinterException;
    import java.awt.print.PrinterJob;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    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.DocAttributeSet;
    import javax.print.attribute.HashDocAttributeSet;
    import javax.print.attribute.HashPrintRequestAttributeSet;
    import javax.print.attribute.PrintRequestAttributeSet;
    import javax.print.attribute.standard.Copies;
    import javax.print.attribute.standard.Sides;
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.commons.lang3.StringUtils;
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
    import org.apache.pdfbox.printing.PDFPageable;
    
    import com.gehouse.smartdevice.config.Global;
    
    /**
     * 调用打印机打印文件
     * @author 寇航艇
     *
     */
    public class PrintFile {
    	
    	/**
    	 * 调用打印机进行打印(打印pdf的打印参数没起作用)
    	 * @param printFilePath 打印文件路径
    	 * @param printFilePath 打印参数
    	 */
    	public void print(String printFilePath, Map<Object, Object> map) {
    		
    		try {
    			// 构建打印请求属性集
    			PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
    			// 设置打印格式,因为未确定文件类型,这里选择AUTOSENSE
    			DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    			// 查找所有的可用打印服务
    			// [发送至 OneNote 2013, NPI82AACC (HP LaserJet M1536dnf MFP), Microsoft XPS Document Writer, Fax, CutePDF Writer]
    			PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
    			// 定位默认的打印服务
    			PrintService defaultService = null;
    			// 获取打印机
    			String printer = (String)map.get("printer");
    			// 判断打印机是否为空
    			if (StringUtils.isBlank(printer)) {
    				// 获取默认配置文件打印机
    				printer = Global.getPrinterA4();
    			}
    			
    			for (int i = 0; i < printService.length; i++) {
    				if (printService[i].getName().contains(printer)) {
    					defaultService = printService[i];
    					break;
    				}
    			}
    			
    			if (defaultService != null) {
    				
    				PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
    				// 创建打印作业
    				DocPrintJob job = defaultService.createPrintJob();
    				// 构造待打印的文件流
    				FileInputStream fis = new FileInputStream(printFilePath);
    				DocAttributeSet das = new HashDocAttributeSet();
    				// 建立打印文件格式
    				Doc doc = new SimpleDoc(fis, flavor, das);
    				//A4纸张
    				//attr.add(MediaSize.A4);
    				// 打印份数
    				if (map.get("Copies") != null) {
    					attr.add(new Copies((int) map.get("Copies")));
    				}
    				//双面打印
    				//attr.add(Sides.DUPLEX);
    				if (map.get("duplex") != null) {
    					if ((boolean)map.get("duplex")) {
    						attr.add(Sides.DUPLEX);
    					}
    				} else {
    					attr.add(Sides.DUPLEX);
    				}
    				// 进行文件的打印
    				job.print(doc, attr);
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (PrintException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	/**
         * 调用打印机,设置打印份数,打印起始位置结束位置,双面打印
         * Prints using custom PrintRequestAttribute values.
         */
    	public void printWithAttributes(String printFilePath, Map<Object, Object> map) {
        	
        	try {
        		System.out.println("开始打印文件: " + printFilePath);
    			PrinterJob job = PrinterJob.getPrinterJob();
    			PDDocument document = PDDocument.load(new File(printFilePath));
    			job.setPageable(new PDFPageable(document));
    			
    			// 构建打印请求属性集
    			PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
    			// 设置打印格式,因为未确定文件类型,这里选择AUTOSENSE
    			DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    			// 查找所有的可用打印服务
    			// [发送至 OneNote 2013, NPI82AACC (HP LaserJet M1536dnf MFP), Microsoft XPS Document Writer, Fax, CutePDF Writer]
    			PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
    			// 定位默认的打印服务
    			PrintService defaultService = null;
    			// 获取打印机
    			String printer = (String)map.get("printer");
    			// 判断打印机是否为空
    			if (StringUtils.isBlank(printer)) {
    				// 获取默认配置文件打印机
    				printer = Global.getPrinterA4();
    			}
    			
    			for (int i = 0; i < printService.length; i++) {
    				if (printService[i].getName().contains(printer)) {
    					defaultService = printService[i];
    					break;
    				}
    			}
    			
    			if (defaultService != null) {
    				// 设置打印机
    				job.setPrintService(defaultService);
    				// 设置打印机属性
    				PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
    				
    				// 打印范围,第几页到第几页
    				// attr.add(new PageRanges(1, 1));
    				// 打印份数
    				// attr.add(new Copies(1));
    				if (map.get("Copies") != null) {
    					attr.add(new Copies((int) map.get("Copies")));
    				}
    				// 纸张大小
    				// attr.add(MediaSize.ISO.A4);
    				// 双面打印
    				if (map.get("duplex") != null) {
    					if ((boolean)map.get("duplex")) {
    						attr.add(Sides.DUPLEX);
    					}
    				} else {
    					attr.add(Sides.DUPLEX);
    				}
    				
    				job.print(attr);
    				document.close();
    				
    				System.out.println("打印完成: " + printFilePath);
    			}
    		} catch (NullPointerException e) {
    			e.printStackTrace();
    		} catch (InvalidPasswordException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (PrinterException e) {
    			e.printStackTrace();
    		}
        	
        }
    	
    	/**
    	 * 获取打印参数
    	 * @param request
    	 * @return
    	 */
    	public Map<Object, Object> getPrintParams(HttpServletRequest request) {
    		
    		// 文件已生成则根据文件路径打印文件
    		Map<Object, Object> map = new HashMap<Object, Object>();
    		// 获取所请求的打印机
    		String printer = request.getParameter("printer");
    		if (printer != null && !"".equals(printer)) {
    			map.put("printer", printer);
    		}
    		// 获取打印份数
    		String pages = request.getParameter("printPages");
    		if (pages != null && !"".equals(pages)) {
    			map.put("Copies", Integer.valueOf(pages));
    		}
    		// 获取双面打印
    		String Sides = request.getParameter("printSides");
    		if (Sides != null && !"".equals(Sides)) {
    			map.put("Sides", Integer.getInteger(Sides));
    		}
    		
    		return map;
    
    	}
    
    }
    

     

     

    展开全文
  • JAVA连接打印机

    2016-09-19 10:25:00
    import java.io.File;  import java.io.FileInputStream;    import javax.print.Doc;  import javax.print.DocFlavor;  import javax.print.DocPrintJob;  import javax.print.PrintService;  ....
    1. import java.io.File;  
    2. import java.io.FileInputStream;  
    3.   
    4. import javax.print.Doc;  
    5. import javax.print.DocFlavor;  
    6. import javax.print.DocPrintJob;  
    7. import javax.print.PrintService;  
    8. import javax.print.PrintServiceLookup;  
    9. import javax.print.ServiceUI;  
    10. import javax.print.SimpleDoc;  
    11. import javax.print.attribute.DocAttributeSet;  
    12. import javax.print.attribute.HashDocAttributeSet;  
    13. import javax.print.attribute.HashPrintRequestAttributeSet;  
    14. import javax.swing.JFileChooser;  
    15.   
    16.     /** 
    17.      * 建立与打印机的连接 
    18.      * @author Administrator 
    19.      * 
    20.      */  
    21. public class PrintDemo {  
    22.       
    23.     public static void main(String[] args) {  
    24.         JFileChooser fileChooser = new JFileChooser(); //创建打印作业  
    25.         int state = fileChooser.showOpenDialog(null);  
    26.         if(state == fileChooser.APPROVE_OPTION){  
    27.             File file = new File("D:/zkyzl.txt"); //获取选择的文件  
    28.             //构建打印请求属性集  
    29.             HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();  
    30.             //设置打印格式,因为未确定类型,所以选择autosense  
    31.             DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;  
    32.             //查找所有的可用的打印服务  
    33.             PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);  
    34.             //定位默认的打印服务  
    35.             PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();  
    36.             //显示打印对话框  
    37.             PrintService service = ServiceUI.printDialog(null, 200, 200, printService,   
    38.                     defaultService, flavor, pras);  
    39.             if(service != null){  
    40.                 try {  
    41.                     DocPrintJob job = service.createPrintJob(); //创建打印作业  
    42.                     FileInputStream fis = new FileInputStream(file); //构造待打印的文件流  
    43.                     DocAttributeSet das = new HashDocAttributeSet();  
    44.                     Doc doc = new SimpleDoc(fis, flavor, das);  
    45.                     job.print(doc, pras);  
    46.                 } catch (Exception e) {  
    47.                     e.printStackTrace();  
    48.                 }  
    49.             }  
    50.         }  
    51.     }  
    52. }  
    展开全文
  • java 后台打印机调用

    千次阅读 2018-10-11 11:33:16
    打印机没反应,代码备份用 /** * */ /** * @author yuanTiao * */ package com.zichen.xhkq.service.print; import java.io.File; import java.io.FileInputStream; import javax.print.Doc; import javax...

     打印机没反应,代码备份用

    /**
     * 
     */
    /**
     * @author yuanTiao
     *
     */
    package com.zichen.xhkq.service.print;
    
    import java.io.File;
    import java.io.FileInputStream;
    
    import javax.print.Doc;
    import javax.print.DocFlavor;
    import javax.print.DocPrintJob;
    import javax.print.PrintService;
    import javax.print.PrintServiceLookup;
    import javax.print.ServiceUI;
    import javax.print.SimpleDoc;
    import javax.print.attribute.DocAttributeSet;
    import javax.print.attribute.HashDocAttributeSet;
    import javax.print.attribute.HashPrintRequestAttributeSet;
    import javax.swing.JFileChooser;
    
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    /** * 
     * 建立与打印机的连接
     * 
     * @author Administrator 
     * 
     */
    @Service
    @Transactional
    public class PrintCnzzService {
    	public boolean printCnzz() {
    		// 创建打印作业
    		JFileChooser fileChooser = new JFileChooser();
    
    		int state = fileChooser.showOpenDialog(null);
    		if (state == fileChooser.APPROVE_OPTION) {
    			// 获取选择的文件
    			File file = new File("D:/msg1.txt");
    			// 构建打印请求属性集
    			HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
    			// 设置打印格式,因为未确定类型,所以选择autosense
    			DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    			// 查找所有的可用的打印服务
    			PrintService printService[] = PrintServiceLookup
    					.lookupPrintServices(flavor, pras);
    			// 定位默认的打印服务
    			PrintService defaultService = PrintServiceLookup
    					.lookupDefaultPrintService();
    			// 显示打印对话框
    			PrintService service = ServiceUI.printDialog(null, 200, 200,
    					printService, defaultService, flavor, pras);
    			if (service != null) {
    				try {
    					DocPrintJob job = service.createPrintJob();
    					// 创建打印作业
    					FileInputStream fis = new FileInputStream(file);
    					// 构造待打印的文件流
    					DocAttributeSet das = new HashDocAttributeSet();
    					Doc doc = new SimpleDoc(fis, flavor, das);
    					job.print(doc, pras);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		}
    		return true;
    	}
    }

     

    展开全文
  • JAVA连接打印机打印小票、产品信息。标签打印机

    万次阅读 热门讨论 2016-04-12 21:01:00
    2018年写了一个标签打印机(TSC TX600),标签打印程序,实现功能是通过串口读出设备ID生成二维码和设备信息,用于esp8266 smart config配网。源码和资料:https://download.csdn.net/download/u012854263/12080191 ...
  • java 调用打印机打印PDF文件

    千次阅读 2018-05-30 21:09:59
    1.Java Print Service ...这种方案局限性比较大,只能打印PNG文件(廉价打印机不支持打印PDF) 2.Apache PDFBox 它的打印实现也是封装了Java Service Print框架的打印功能,支持性比较好 引入maven <...
  • java调用打印机代码

    千次阅读 2018-05-14 16:34:35
    package com.paic.printFile;import java.io.File; import java.io.FileInputStream; import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.Pri...
  • Java调用打印机服务

    2018-01-18 14:43:33
    package com.sdrd.util; import java.io.File; import java.io.FileInputStream; import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintService; imp
  • java调用打印机的两种方式

    千次阅读 2019-12-04 16:55:33
    一、用java中自带的PrintServiceLookup实现 import javax.imageio.ImageIO; import javax.print.*; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute....
  • java008抽象类打印机

    2015-12-07 10:09:50
    "该打印机使用针式打印机" ); } } =================== class test{ public static void main ( String args []) { printer p1=new hpprinter () ; p1.open () ; p1.print () ; p1.close () ; ...
  • // 创建打印任务 PrinterJob job = PrinterJob.getPrinterJob(); job.setPageable(new PDFPageable(document)); job.setPrintService(printService); //设置打印页面 job.print(); } /** * printerName ...
  • 最近,由于项目需求,需要增加系统调用打印机打印PDF文档功能。以前在Asp.Net项目中做过套打,但是现在的需求直接文档打印,下面是实现代码调用打印机的两种方法。 1.Java Print Service Java Print Service是Java...
  • 1:直接通过指定的打印机创建打印任务 DocPrintJob job= myPrintService.createPrintJob(); 2:手动创建打印任务,再与指定的打印机进行关联 PrinterJob job=PrinterJob.getPrinterJob(); job.setPrintServie...
  • java 调用打印机程序

    千次阅读 2015-11-16 13:07:45
    public static void main(String[] args) {  JFileChooser fileChooser = new JFileChooser(); //创建打印作业  int state = fileChooser.showOpenDialog(null);  if(state == fileChooser.
  • Java调用打印机的问题

    2017-03-20 00:13:27
    这是关于Java调用打印机的问题的,当我把打印数据格式设置为AUTOSENSE时,可以找到打印服务 [img=https://img-bbs.csdn.net/upload/201703/20/1489939543_892239.png][/img] 选择虚拟打印机打印成pdf,生成Java ...
  • java 指定打印机 进行打印

    千次阅读 2017-04-27 18:34:54
    [java] view plain copy package com.printer;    import java.io.*;  import java.util.Locale;    import javax.print.*;  import javax.print.attribute.*; 
  • javax.print包是API的主包,其中包含的和接口能够让你:1)发现打印服务(Print Services)2)指定打印数据的格式 3)从一个打印服务创建打印工作(print jobs) 4)向一个打印设备或者数据流发送打印数据 ...
  • [Java]打印机服务程序

    千次阅读 2016-06-10 17:36:06
    打印机服务程序,采取动态优先级方案,有三种调度策略。 动态优先级方法: 任何时刻, 用户都可以向服务器发送打印请求 每个请求包含打印文件的文件名字, 页数. 服务器根据文件页数初始化该请求的优先级, 并将该...
  • java 打印机 打印服务API

    热门讨论 2010-02-03 14:19:32
    java打印机 学习如何使用打印服务API 解释了如 何一步一步的定位打印设备,创建打印工程,创建一个Doc 接口的实例,以此来描述你想 要打印的数据并且初始化打印 自从问世以来,Java 在多数方面都成长迅速。但一直...
  • Java调用小票打印机打印购物清单
  • JAVA 指定打印机进行打印

    千次阅读 2014-07-01 22:22:28
    import java.io.*;import java.util.Locale;import javax.print.*;import javax.print.attribute.*;import javax.print.attribute.standard.*;public class PrintTest {public static void main

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,326
精华内容 8,530
关键字:

java创建打印机类

java 订阅