`
xiaohe9527
  • 浏览: 15196 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java打印文本文件

 
阅读更多
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.JobName;
import javax.print.attribute.standard.PrinterName;
import javax.swing.JPanel;

//import com.fujitsu.systemwalker.guiparts.MpGuiptConstants;
//import com.fujitsu.systemwalker.guiparts.MpGuiptTrace;
/**

 *
 */
public class MpGuiptTextPrint {
	private PrintPanelComp printPanel;	//
	/**

	 */
	public static final int PRINT_OK = 0;
	/**

	 */
	public static final int PRINT_CANCEL = 1;
	/**

	 */
	public static final int PRINT_NODATA = -1;
	/**

	 */
	public static final int PRINT_ERROR = -2;
	/**

	 */
	public static final int PRINT_NO_PRINTER = -3;
	/**

	 */
	public MpGuiptTextPrint(){
		printPanel = new PrintPanelComp();
	}
	/**

	 */
	public int printDialog(String[] printData,String jobString,String printerName){
		printPanel.setPrintData(printData);
		if (!printPanel.isGoPrint()){
			return PRINT_NODATA;
		}
		//
		PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
		//
		aset.add(new JobName(jobString, null));
		//
		PrinterJob pj = PrinterJob.getPrinterJob();
		pj.setPrintable(printPanel);
		
		//get printer service
		PrintService printService =null;
		if (printerName == null){
			printService = PrintServiceLookup.lookupDefaultPrintService();
		}
		else{
			//find printer
			//HashAttributeSet hs = new HashAttributeSet();
			//hs.add(new PrinterName(printerName, null));
			//boolean found_print =false;
			PrintService[] services = PrintServiceLookup.lookupPrintServices(null,null);
			if (services.length > 0) {
				for (int i = 0; i < services.length; i++) {
					if (printerName.equals(services[i].getName())){
						printService = services[i];
					}
				}
			}
			else{
				printPanel.setPrintData(null);
				return PRINT_NO_PRINTER;
			}
			

		}
		
		if (printService ==null){
			printPanel.setPrintData(null);
			return PRINT_NO_PRINTER;
		}

		try {
			pj.setPrintService(printService);
			//System.out.println("printer:" + services[0].getName());
			pj.print(aset);
			return PRINT_OK;
		} catch (PrinterException e) {
			// TODO Auto-generated catch block

			// e.printStackTrace();
			return PRINT_ERROR;
		}

	}

	/**
	 */
	public void setFont(Font font){
		printPanel.setFont(font);
	}
	/**
	 */
	public Font getFont(){
		return printPanel.getFont();
	}
	/**
	 */
	private class PrintPanelComp extends JPanel implements Printable {
		private int page;
		private int[] lineStart;
		private int[] charStart;
		private boolean pageCheck;
		private String[] stringData;
		/**
		 */
		public PrintPanelComp(){
			setBackground(Color.WHITE);
			stringData = null;
			pageCheck = false;
		}
		/**
		 */
		public boolean isGoPrint(){
			if (stringData == null ||
					stringData.length <= 0){
				return false;
			}
			return true;
		}
		/**
		 */
		public void setPrintData(String[] stringData){
			this.stringData = stringData;
			pageCheck = false;
		}
		/**
		 */		
		public int print(Graphics g, PageFormat fmt, int index) throws PrinterException {
			if (!isGoPrint()){
				return NO_SUCH_PAGE;
			}

			FontMetrics metrics=g.getFontMetrics();
			//
			if(!pageCheck){
				chaeckPageAttribute(metrics,fmt);
			}
			//
			if(index>=page){						//
				pageCheck=false;	//
				return NO_SUCH_PAGE;
			}else{									//
				//
				int x=(int)fmt.getImageableX();
				int y=(int)fmt.getImageableY();
				g.translate(x,y);
				//
				int px=0;
				int py=metrics.getHeight();
				//
				for(int l=lineStart[index];l<stringData.length;l++){
					//
					int s;
					if(l!=lineStart[index]){
						s=0;
					}else{
						s=charStart[index];
					}
					//
					for(int c=s;c<stringData[l].length();c++){
						//
						if (stringData[l].charAt(c) == '\f'){
							return PAGE_EXISTS;
						}
						//
						int w=px+metrics.charWidth(stringData[l].charAt(c));
						//
						if(w>fmt.getImageableWidth()){
							px=0;
							py+=metrics.getHeight();
							//
							if(py>fmt.getImageableHeight()){
								return PAGE_EXISTS;
							}
						}
						//
						g.drawString(String.valueOf(stringData[l].charAt(c)),px,py);
						//
						px+=metrics.charWidth(stringData[l].charAt(c));
					}
					//
					px=0;
					py+=metrics.getHeight();
					//
					if(py>fmt.getImageableHeight()){
						return PAGE_EXISTS;
					}
				}
				//
				return PAGE_EXISTS;
			}
		}
		/**
		 */
		private void chaeckPageAttribute(FontMetrics metrics,PageFormat fmt){
			ArrayList<Integer> lineArray=new ArrayList<Integer>();
			ArrayList<Integer> charArray=new ArrayList<Integer>();
			//
			int px=0;
			int py=metrics.getHeight();
			//
			lineArray.add(Integer.valueOf(0));
			charArray.add(Integer.valueOf(0));
			//
			for(int l=0;l<stringData.length;l++){
				for(int c=0;c<stringData[l].length();c++){
					//
					if (stringData[l].charAt(c) == '\f'){
						px=0;
						py=metrics.getHeight();
						//
						if (c == stringData[l].length() - 1){
							//
							lineArray.add(Integer.valueOf(l + 1));
							charArray.add(Integer.valueOf(0));
						}
						else{
							//
							lineArray.add(Integer.valueOf(l));
							charArray.add(Integer.valueOf(c + 1));
						}
					}
					else{
						//
						int w=px+metrics.charWidth(stringData[l].charAt(c));
						//
						if(w>fmt.getImageableWidth()){
							px=0;
							py+=metrics.getHeight();
							//
							if(py>fmt.getImageableHeight()){
								px=0;
								py=metrics.getHeight();
								//
								lineArray.add(Integer.valueOf(l));
								charArray.add(Integer.valueOf(c));
							}
						}
						//
						//
						px+=metrics.charWidth(stringData[l].charAt(c));
					}
				}
				//
				px=0;
				py+=metrics.getHeight();
				//
				if(py>fmt.getImageableHeight()){
					px=0;
					py=metrics.getHeight();
					//
					if(l!=stringData.length-1){
						lineArray.add(Integer.valueOf(l+1));
						charArray.add(Integer.valueOf(0));
					}
				}
			}
			//
			page=lineArray.size();
			lineStart=new int[page];
			charStart=new int[page];
			for(int p=0;p<page;p++){
				lineStart[p]=((Integer)lineArray.get(p)).intValue();
				charStart[p]=((Integer)charArray.get(p)).intValue();
			}
			//
			pageCheck=true;
		}
		
	}
	
	public static void main(String[] args) throws Exception{
		
		
		MpGuiptTextPrint mptp = new MpGuiptTextPrint();
		
		//
		

		String fileName = "/tmp/3.txt";
		String encode = "shift_jis";

		InputStreamReader read = null;
		BufferedReader reader = null;

		String lineIn = null;
		StringBuffer buffer = new StringBuffer();
		try {
			read = new InputStreamReader(new FileInputStream(fileName), encode);
			reader = new BufferedReader(read);
			while ((lineIn = reader.readLine()) != null) {
				if (buffer.length() != 0) {
					buffer.append("\r\n");
				}
				buffer.append(lineIn.trim());
			}
		} catch (Exception e) {
			throw e;
		} finally {
			read.close();
			reader.close();
		}
		
		int i = mptp.printDialog(buffer.toString().split("\r\n"), "javaprint","ppp2");
		System.out.println("i:"+i);
	}
}





AttributeSet aset = new HashAttributeSet();
    aset.add(new PrinterName("HP LaserJet", null));
    services = PrintServiceLookup.lookupPrintServices(null, aset);

分享到:
评论

相关推荐

    java打印组件非常好用的java打印组件

    Java打印组件是Java开发中用于处理打印任务的关键工具,它使得开发者能够轻松地在应用程序中实现文档和数据的打印功能。在Java中,主要通过Java Print Service API来提供打印服务,这是一个强大的接口,允许程序员...

    java打印 java定位打印

    Java打印和定位打印是Java开发中的重要组成部分,主要用于在控制台、文件或图形用户界面(GUI)上输出信息。在Java中,打印功能主要通过`System.out.println()`方法实现,而定位打印则涉及到更复杂的文本格式化技巧...

    java打印pdf文件

    Java打印PDF文件是一种常见的任务,尤其在开发报告生成、文档转换或者数据可视化等场景中。在Java中,我们可以借助第三方库来实现这个功能,其中最常用的就是iText库。iText是一个强大的PDF处理库,它提供了创建、...

    在Java中轻松打印文档.rar_JAVA打印_java 打印_打印 JAVA_打印文档

    下面是一个简单的打印文本文件的示例: ```java import java.awt.print.*; import java.io.*; import javax.print.*; public class PrintExample { public static void main(String[] args) throws ...

    Java web 打印,Java pdf打印,Java打印

    根据提供的文件信息,本文将详细解析与Java Web打印、Java PDF打印相关的技术点及实现方法。主要内容包括: 1. Java Web打印的基本概念。 2. 使用Struts框架进行Web页面开发的相关知识点。 3. Java PDF打印的技术...

    Java打印程序设计全攻略-打印预览.doc

    该实例旨在打印一个窗体的某个文本编辑域的内容,并且每页最多打印 54 行。该实例可以帮助开发者更好地理解 Java 打印程序设计的实现细节。 本文对 Java 打印程序设计进行了详细的介绍,旨在帮助开发者更好地理解 ...

    新建文本文档_java_

    标题中的“新建文本文档_java_”可能是指一个关于Java编程的项目或教程,其中可能涉及文本处理和文件操作。这个项目的重点在于处理多个文件,比较它们与一个目标文件的内容,然后根据目标文件中出现的文件名进行过滤...

    java 打印指定文本

    整理sun的连接打印机打印指定文本的类,简单连接默认打印机打印。

    java打印API详解

    至于提到的`js-word.docx`文件,这可能是一个示例Word文档,用于演示如何使用Java打印API打印Word内容。在实际应用中,开发者可能需要先使用Apache POI等库读取并解析`.docx`文件,然后将解析得到的数据转换为Java...

    java实现word预览打印

    在IT行业中,尤其是在文档处理领域,Java是一种广泛使用的编程语言,可以实现各种复杂的功能,如动态生成模板Word文件,将其转换为PDF,并进行预览打印。以下是对标题、描述和标签所涉及知识点的详细说明: 1. **...

    Java打印小票自定义小票纸张大小,分辨率

    在Java编程环境中,进行小票打印时,我们经常会遇到需要自定义小票纸张大小和分辨率的需求。这通常涉及到对打印机API的深入理解和利用。以下将详细解释如何实现这一目标。 首先,Java提供了`java.awt.print`包,该...

    java文本文件搜索

    `main()`方法是程序的入口点,设置起始目录并打印出所有找到的文本文件的绝对路径。 在实际应用中,你可能需要增加更多的逻辑,比如处理异常、提供更复杂的过滤条件或者使用线程并行搜索以提高效率。此外,可以使用...

    java好用打印控件

    ReYoPrint是一个可能的Java打印控件,其 CAB( Cabinet)文件是Windows系统中用于分发软件的一种压缩格式,通常包含控件的安装文件或驱动程序。在这种情况下,`.cab`文件可能包含了ReYoPrint控件的组件和必要的驱动...

    java 打印excel

    ### Java打印Excel知识点详解 #### 一、概述 在日常工作中,经常需要将Java程序中的数据导出到Excel文件中,以便于进一步分析或与其他系统共享。Apache POI是Java领域内一个非常强大的用于处理Microsoft Office...

    java打印技术

    Java打印技术和JavaScript(简称js)打印技术是网页和应用程序中实现文档输出的重要手段。这两种技术在不同的场景下各有优势,可以满足用户从浏览器或服务器端进行打印的需求。 首先,我们来了解一下Java打印技术。...

    纯java代码跨平台调用打印机打印word、pdf、图片等。

    7. **Java打印服务API**:Java的标准`java.awt.print`包提供了一组接口和类,如`PrinterJob`、`PageFormat`和`PrintService`,用于处理打印任务。开发者可以通过这些API设置打印参数,如纸张大小、方向和质量,并...

    java实现 文本相似度

    在提供的"作业"文件中,可能包含了实现这些步骤的Java代码示例,包括预处理、分词、向量化和相似度计算的函数,以及运行和展示结果的主程序。通过分析和理解这些代码,你可以更深入地了解如何在实际项目中应用文本...

    java 打印预览源码

    Java打印预览源码是Java开发中用于实现文档打印及预览功能的代码,它能够帮助开发者在程序中实现对文本、图像或者其他类型的数据进行打印操作,并且可以在打印前进行预览,确保打印效果符合预期。Java的打印功能主要...

    JAVA连接打印机打印小票

    例如,打印文本可以使用"ESC + @"初始化打印机,"GS + V + 0"用于切纸。 2. **TSCLIB**: TSCLIB是一个专门针对TSC(Taiwan Semiconductor Co., Ltd.)品牌条形码打印机的JAVA类库。它提供了方便的API来控制打印机...

    java打印完整攻略

    根据给定的信息,本文将深入探讨Java打印技术的不同方面,特别是使用不同的Java版本中的API来进行打印的方法。文章将从理解基础的打印概念入手,逐步深入到具体的API使用案例。 ### Java打印基础 Java中的打印机制...

Global site tag (gtag.js) - Google Analytics