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);
}
}





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

[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java中调用打印机驱动程序实现文本位置打印,您可以使用Java打印API。Java打印API是一组用于打印文档的Java类和接口,可以让您创建和打印文档,包括文本、图像和其他类型的内容。 以下是一个简单的示例代码,演示如何使用Java打印API调用驱动程序实现文本位置打印: ```java import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; public class PrintText { public static void main(String[] args) { // 创建一个打印任务 Printable printable = new Printable() { @Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { if (pageIndex > 0) { // 如果页码超出范围,返回NO_SUCH_PAGE return Printable.NO_SUCH_PAGE; } // 获取2D绘图上下文 Graphics2D g2d = (Graphics2D) graphics; // 设置字体 g2d.setFont(new Font("宋体", Font.PLAIN, 12)); // 设置打印位置 int x = 50; int y = 50; // 打印文本 g2d.drawString("Hello, World!", x, y); // 返回打印完成 return Printable.PAGE_EXISTS; } }; // 创建一个打印作业 PrinterJob job = PrinterJob.getPrinterJob(); // 设置打印任务 job.setPrintable(printable); // 调用打印对话框 if (job.printDialog()) { try { // 开始打印 job.print(); } catch (PrinterException e) { e.printStackTrace(); } } } } ``` 在上述代码中,我们首先创建一个打印任务,该任务包含打印文本的代码。接着,我们创建一个打印作业,并将打印任务设置为该作业的打印任务。然后,我们调用打印对话框,让用户选择打印机和打印设置。最后,如果用户确认打印,我们将开始打印。 请注意,上述示例代码中的打印任务仅打印了一个字符串,并将其放置在指定的位置。如果您需要打印更复杂的文档,可以使用Java打印API提供的其他功能来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值