Java如何调用系统打印机打印文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java如何调用系统打印机打印文件相关的知识,希望对你有一定的参考价值。

1、Desktop.getDesktop().print(new File("c:/123.jpg"));
2、private void printFileAction()

//构造一个文件选择器,默认为当前目录
JFileChooser fileChooser = new JFileChooser(SystemProperties.USER_DIR);
int state = fileChooser.showOpenDialog(this);//弹出文件选择对话框
if (state == fileChooser.APPROVE_OPTION)//如果用户选定了文件

File file = fileChooser.getSelectedFile();//获取选择的文件
//构建打印请求属性集
PrintRequestAttributeSet 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();





在上面的示例中,因尚未确定文件的类型,所以将指定文件的打印格式定义为DocFlavor.INPUT_STREAM.AUTOSENSE。事实上,如果在进行打印之前,就已确定地知道文件的格式,如为GIF,就应定义为DocFlavor.INPUT_STREAM.GIF ;如为PDF,就应该定义为DocFlavor.INPUT_STREAM.PDF;如为纯ASCII文件,就可以定义为 DocFlavor.INPUT_STREAM.TEXT_html_US_ASCII。等等。jdk1.4的javax.print.DocFlavor提供了极为丰富的文件流类型,你可以根据具体的应用需求进行合适的选择。
参考技术A 如下:
public static String do_post(String url, List<NameValuePair> name_value_pair) throws IOException 
        String body = "";
        DefaultHttpClient httpclient = new DefaultHttpClient();
        try 
            HttpPost httpost = new HttpPost(url);
            httpost.setEntity(new UrlEncodedFormEntity(name_value_pair, StandardCharsets.UTF_8));
            HttpResponse response = httpclient.execute(httpost);
            HttpEntity entity = response.getEntity();
            body = EntityUtils.toString(entity);
         finally 
            httpclient.getConnectionManager().shutdown();
        
        return body;
    
    public static String do_get(String url) throws ClientProtocolException, IOException 
        String body = "";
        DefaultHttpClient httpclient = new DefaultHttpClient();
        try 
            HttpGet httpget = new HttpGet(url);
            HttpResponse response = httpclient.execute(httpget);
            HttpEntity entity = response.getEntity();
            body = EntityUtils.toString(entity);
         finally 
            httpclient.getConnectionManager().shutdown();
        
        return body;
    

本回答被提问者和网友采纳
参考技术B 具体步骤如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

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.swing.JFileChooser;

public class PrintDemo

public static void main(String[] args)
JFileChooser fileChooser = new JFileChooser(); // 创建打印作业
File file = new File("f:/111.txt"); // 获取选择的文件
// 构建打印请求属性集
HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
// 设置打印格式,因为未确定类型,所以选择autosense
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
// 定位默认的打印服务
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
InputStream fis = null;
try
DocPrintJob job = defaultService.createPrintJob(); // 创建打印作业
fis = new FileInputStream(file); // 构造待打印的文件流
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(fis, flavor, das);
job.print(doc, pras);
catch (Exception e)
e.printStackTrace();
finally
if (fis != null)
try
fis.close();
catch (IOException e)
e.printStackTrace();




参考技术C 本人印证:运行后弹窗选取本地需打印的文件;稍等一会儿,系统会自动调用本地打印程序待确认,然后就跟平时打印一样了。
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;
public class TestController
public static void main(String[] args)
JFileChooser fileChooser = new JFileChooser();//创建打印作业
int state = fileChooser.showOpenDialog(null);
if(state == fileChooser.APPROVE_OPTION)
//File file = new File("D:/haha.txt");//获取选择的文件
File file = fileChooser.getSelectedFile();//获取选择的文件
//构建打印请求属性集
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();




java怎样调用dll动态库实现打印。

参考技术A 调用dll需要用JNI技术
java自带有打印的支持,在javax.print包里

典型的应用程序使用 Java Print Service API 执行以下步骤来处理打印请求:
选择一个 DocFlavor。
创建一个属性集。
找到一个可处理由 DocFlavor 和属性集所指定的打印请求的 PrintService。
创建一个 Doc 对象,该对象封装 DocFlavor 和实际的打印数据,这些打印数据可采用很多形式,包括:Postscript 文件、JPEG 图像、URL 或纯文本。
从 PrintService 获得一个由 DocPrintJob 表示的 PrintJob。
调用 PrintJob 的 print 方法。
以下代码示例说明了 Java Print Service API 的典型用法:找到可在 A4 大小的纸张上打印 5 份 Postscript 文档双面副本的打印机、根据某个返回的 PrintService 创建 PrintJob 并调用 print 方法。

FileInputStream psStream;
try
psStream = new FileInputStream("file.ps");
catch (FileNotFoundException ffne)

if (psStream == null)
return;


DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT;
Doc myDoc = new SimpleDoc(psStream, psInFormat, null);
PrintRequestAttributeSet aset =
new HashPrintRequestAttributeSet();
aset.add(new Copies(5));
aset.add(MediaSize.A4);
aset.add(Sides.DUPLEX);
PrintService[] services =
PrintServiceLookup.lookupPrintServices(psInFormat, aset);
if (services.length > 0)
DocPrintJob job = services[0].createPrintJob();
try
job.print(myDoc, aset);
catch (PrintException pe)

以上是关于Java如何调用系统打印机打印文件的主要内容,如果未能解决你的问题,请参考以下文章

如何用JAVA调用TLP条码打印机打印条码

java如何调用本地打印机进行图片打印

如何通过JAVA代码调用网络打印机使其打印接收到的文件

如何在java中用javascript来打印pdf

Java jacob调用打印机打印word文档

java怎样调用dll动态库实现打印。