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 Print Service API来提供打印服务,这是一个强大的接口,允许程序员...
Java打印和定位打印是Java开发中的重要组成部分,主要用于在控制台、文件或图形用户界面(GUI)上输出信息。在Java中,打印功能主要通过`System.out.println()`方法实现,而定位打印则涉及到更复杂的文本格式化技巧...
Java打印PDF文件是一种常见的任务,尤其在开发报告生成、文档转换或者数据可视化等场景中。在Java中,我们可以借助第三方库来实现这个功能,其中最常用的就是iText库。iText是一个强大的PDF处理库,它提供了创建、...
下面是一个简单的打印文本文件的示例: ```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打印相关的技术点及实现方法。主要内容包括: 1. Java Web打印的基本概念。 2. 使用Struts框架进行Web页面开发的相关知识点。 3. Java PDF打印的技术...
该实例旨在打印一个窗体的某个文本编辑域的内容,并且每页最多打印 54 行。该实例可以帮助开发者更好地理解 Java 打印程序设计的实现细节。 本文对 Java 打印程序设计进行了详细的介绍,旨在帮助开发者更好地理解 ...
标题中的“新建文本文档_java_”可能是指一个关于Java编程的项目或教程,其中可能涉及文本处理和文件操作。这个项目的重点在于处理多个文件,比较它们与一个目标文件的内容,然后根据目标文件中出现的文件名进行过滤...
整理sun的连接打印机打印指定文本的类,简单连接默认打印机打印。
至于提到的`js-word.docx`文件,这可能是一个示例Word文档,用于演示如何使用Java打印API打印Word内容。在实际应用中,开发者可能需要先使用Apache POI等库读取并解析`.docx`文件,然后将解析得到的数据转换为Java...
在IT行业中,尤其是在文档处理领域,Java是一种广泛使用的编程语言,可以实现各种复杂的功能,如动态生成模板Word文件,将其转换为PDF,并进行预览打印。以下是对标题、描述和标签所涉及知识点的详细说明: 1. **...
在Java编程环境中,进行小票打印时,我们经常会遇到需要自定义小票纸张大小和分辨率的需求。这通常涉及到对打印机API的深入理解和利用。以下将详细解释如何实现这一目标。 首先,Java提供了`java.awt.print`包,该...
`main()`方法是程序的入口点,设置起始目录并打印出所有找到的文本文件的绝对路径。 在实际应用中,你可能需要增加更多的逻辑,比如处理异常、提供更复杂的过滤条件或者使用线程并行搜索以提高效率。此外,可以使用...
ReYoPrint是一个可能的Java打印控件,其 CAB( Cabinet)文件是Windows系统中用于分发软件的一种压缩格式,通常包含控件的安装文件或驱动程序。在这种情况下,`.cab`文件可能包含了ReYoPrint控件的组件和必要的驱动...
### Java打印Excel知识点详解 #### 一、概述 在日常工作中,经常需要将Java程序中的数据导出到Excel文件中,以便于进一步分析或与其他系统共享。Apache POI是Java领域内一个非常强大的用于处理Microsoft Office...
Java打印技术和JavaScript(简称js)打印技术是网页和应用程序中实现文档输出的重要手段。这两种技术在不同的场景下各有优势,可以满足用户从浏览器或服务器端进行打印的需求。 首先,我们来了解一下Java打印技术。...
7. **Java打印服务API**:Java的标准`java.awt.print`包提供了一组接口和类,如`PrinterJob`、`PageFormat`和`PrintService`,用于处理打印任务。开发者可以通过这些API设置打印参数,如纸张大小、方向和质量,并...
在提供的"作业"文件中,可能包含了实现这些步骤的Java代码示例,包括预处理、分词、向量化和相似度计算的函数,以及运行和展示结果的主程序。通过分析和理解这些代码,你可以更深入地了解如何在实际项目中应用文本...
Java打印预览源码是Java开发中用于实现文档打印及预览功能的代码,它能够帮助开发者在程序中实现对文本、图像或者其他类型的数据进行打印操作,并且可以在打印前进行预览,确保打印效果符合预期。Java的打印功能主要...
例如,打印文本可以使用"ESC + @"初始化打印机,"GS + V + 0"用于切纸。 2. **TSCLIB**: TSCLIB是一个专门针对TSC(Taiwan Semiconductor Co., Ltd.)品牌条形码打印机的JAVA类库。它提供了方便的API来控制打印机...
根据给定的信息,本文将深入探讨Java打印技术的不同方面,特别是使用不同的Java版本中的API来进行打印的方法。文章将从理解基础的打印概念入手,逐步深入到具体的API使用案例。 ### Java打印基础 Java中的打印机制...